module Main where
import Data.Array.Repa (Array, DIM2, computeP)
import Data.Array.Repa.Repr.ForeignPtr (F)
import System.Directory (getTemporaryDirectory)
import System.Exit (exitFailure, exitSuccess)
import System.FilePath ((</>))
import Data.Array.Repa.IO.Sndfile (readSF, writeSF)
import Data.Array.Repa.IO.Sndfile.Examples (genSine, waveMonoPcm16)
main :: IO ()
main = do
tmpdir <- getTemporaryDirectory
let outFile = tmpdir </> "sin440.wav"
dur, frq, sr :: Num a => a
dur = 3
frq = 440
sr = 48000
fmt = waveMonoPcm16 (dur * sr)
arr <- computeP (genSine dur frq) :: IO (Array F DIM2 Double)
writeSF outFile fmt arr
(fmt', _arr') <- asTypeOf (fmt, arr) `fmap` readSF outFile
if fmt' == fmt then exitSuccess else exitFailure