soxlib-0.0.1.2: demo/Demo.hs
module Main where
import qualified Sound.SoxLib as SoxLib
import qualified Data.StorableVector as SV
import Foreign.Storable (peek, )
writerInfo :: Int -> SoxLib.WriterInfo
writerInfo numChans =
SoxLib.defaultWriterInfo {
SoxLib.writerSignalInfo = Just $
SoxLib.defaultSignalInfo {
SoxLib.rate = Just 44100,
SoxLib.channels = Just numChans,
SoxLib.precision = Just 16
}
}
writeMono :: FilePath -> IO ()
writeMono filename =
SoxLib.withWrite (writerInfo 1) filename $ \fmt ->
let chunk = SV.iterateN 256 (128*256*256+) 0
in do SoxLib.writeStorableVector fmt chunk
SoxLib.writeStorableVector fmt (SV.reverse chunk)
writeStereo :: FilePath -> IO ()
writeStereo filename =
SoxLib.withWrite (writerInfo 2) filename $ \fmt ->
let chunk = SV.iterateN 256 (128*256*256+) 0
in SoxLib.writeStorableVector fmt $
SV.interleave [chunk, SV.reverse chunk]
readInfo :: FilePath -> IO ()
readInfo filename =
SoxLib.withRead SoxLib.defaultReaderInfo filename $ \fmtPtr -> do
fmt <- peek fmtPtr
print $ SoxLib.encodingInfo fmt
let si = SoxLib.signalInfo fmt
print si
case SoxLib.length si of
Nothing -> putStrLn "unknown length"
Just n ->
print . SV.map (flip div (256*256*256)) =<<
SoxLib.readStorableVector fmtPtr n
main :: IO ()
main = SoxLib.formatWith $ do
let monoName = "mono.wav"
let stereoName = "stereo.wav"
writeMono monoName
writeStereo stereoName
readInfo monoName
readInfo stereoName