synthesizer-core-0.9.0.1: src/Synthesizer/Storable/Generate.hs
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 silenceChunkSize barBeepFreq beatBeepFreq beepDur beatsPerBar beatPeriod@
generates click track for one bar.
You may cycle it infinitely or replicate it as often as you want.
-}
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)