module Sound.SC3.Common.Buffer.Vector where
import qualified Data.Vector.Storable as V
import qualified Sound.SC3.Common.Buffer as C
clipAt :: V.Storable t => Int -> V.Vector t -> t
clipAt ix c =
let r = V.length c
f = (V.!) c
in if ix > r - 1 then f (r - 1) else f ix
blendAt :: (V.Storable t,RealFrac t) => t -> V.Vector t -> t
blendAt = C.blendAtBy clipAt
from_wavetable :: (V.Storable t,Num t) => V.Vector t -> V.Vector t
from_wavetable wt =
let n = V.length wt
f k = let k2 = k * 2 in (wt V.! k2) + (wt V.! (k2 + 1))
in V.generate (n `div` 2) f
resamp1 :: (V.Storable t,RealFrac t) => Int -> V.Vector t -> V.Vector t
resamp1 n c =
let gen = C.resamp1_gen n (V.length c) clipAt c
in V.generate n gen