module Synthesizer.Storable.Generate where
import qualified Synthesizer.Storable.Oscillator as Osci
import qualified Synthesizer.Storable.Signal as SigSt
import qualified Algebra.Additive as Additive
import qualified Algebra.RealRing as RealRing
import qualified Algebra.Transcendental as Trans
import Foreign.Storable (Storable, )
clickTrack ::
(RealRing.C a, Trans.C a, Storable a) =>
SigSt.ChunkSize ->
a -> a -> Int -> Int -> Int -> SigSt.T a
clickTrack chunkSize
barBeepFreq beatBeepFreq beepDur beatsPerBar beatPeriod =
let beep freq =
SigSt.take beepDur
(Osci.staticSine (SigSt.chunkSize beepDur) Additive.zero freq)
`SigSt.append`
SigSt.replicate chunkSize (beatPeriod-beepDur) Additive.zero
in SigSt.concat $
beep barBeepFreq :
replicate (beatsPerBar-1) (beep beatBeepFreq)
clickTrackExample :: SigSt.T Float
clickTrackExample =
SigSt.concat $ replicate (3*8) $
clickTrack SigSt.defaultChunkSize 0.04 0.02 500 4 (84*441)