wavy-0.1.0.0: src/SineGenerator.hs
module SineGenerator
( GenerateInfo(..)
, generateWave
) where
data GenerateInfo = GenerateInfo
{ duration :: Integer
, frequency :: Double
, sampleRate :: Integer
}
deriving(Eq, Show)
generateWave :: GenerateInfo -> [Double]
generateWave genInfo = take samplesRequired $ map valueGenerate [1.0..]
where
valueGenerate = generateValue genInfo
samplesRequired :: Int
samplesRequired = fromIntegral (sr * dur)
sr = sampleRate genInfo
dur = duration genInfo
generateValue :: GenerateInfo -> Double -> Double
generateValue genInfo count = sin (count * freq / samplesPerSecond * twoPI)
where
samplesPerSecond :: Double
samplesPerSecond = fromIntegral sr
sr = sampleRate genInfo
freq = frequency genInfo
twoPI :: Floating a => a
twoPI = pi * 2