module Main where
import qualified Synthesizer.Storable.Signal as SigSt
import qualified Synthesizer.Generic.Fourier as Fourier
import qualified Synthesizer.Generic.Noise as NoiseG
import qualified Synthesizer.Generic.Signal as SigG
-- import qualified Synthesizer.Generic.Cut as CutG
import qualified Synthesizer.State.Noise as NoiseS
import qualified Synthesizer.State.Signal as SigS
import qualified Data.StorableVector as SV
-- import qualified Algebra.Ring as Ring
import qualified Number.Complex as NPComplex
import System.TimeIt (timeIt, )
import NumericPrelude.Numeric
import NumericPrelude.Base
import Prelude ()
test0 :: IO ()
test0 =
SigSt.writeFile "fouriertest.f64" $
SigG.take 65536 $
(NoiseG.white SigG.defaultLazySize :: SigSt.T Double)
test1 :: IO ()
test1 =
SigSt.writeFile "fouriertest.f64" $
SigG.fromState SigG.defaultLazySize $
SigS.take 65536 $
SigS.map (NPComplex.+: 0) $
(NoiseS.white :: SigS.T Double)
test2 :: Int -> IO ()
test2 n =
writeFile "fouriertest.cache" $
show $ Fourier.cacheBackward $
(\sig ->
SigG.fromState SigG.defaultLazySize sig ::
SigSt.T (NPComplex.T Double)) $
SigS.take n $
SigS.map (NPComplex.+: 0) $
NoiseS.white
test3 :: Int -> IO ()
test3 n =
let sig :: SigSt.T (NPComplex.T Double)
sig =
SigG.fromState SigG.defaultLazySize $
SigS.take n $
SigS.map (NPComplex.+: 0) $
NoiseS.white
cache =
Fourier.cacheBackward sig
in do timeIt $ writeFile "fouriertest.cache" $ show cache
timeIt $ SigSt.writeFile "fouriertest.f64" $
Fourier.transformWithCache cache sig
test4 :: Int -> IO ()
test4 n =
let sig :: SV.Vector (NPComplex.T Double)
sig =
SigS.toStrictStorableSignal n $
SigS.take n $
SigS.map (NPComplex.+: 0) $
NoiseS.white
cache =
Fourier.cacheBackward sig
in do -- timeIt $ writeFile "fouriertest.cache" $ show cache
timeIt $ SV.writeFile "fouriertest.f64" $
Fourier.transformWithCache cache sig
main :: IO ()
main =
-- timeIt $ test2 (4096*3+1)
-- test4 (4096*3+1)
sequence_ $
timeIt test0 : timeIt test1 :
map test4
(16384 : (4096*3) : (4096*3+1) : 11025 :
(3^9) : (5^6) : (7^5) :
(6^6) : (3*5*7*11*13) :
[])
{-
(65536 : 65537 : 44100 :
(3^10) : (5^7) : (7^5) :
(6^6) : (2*3*5*7*11*13) :
[])
-}