module PitchTrack.Track (
trackFile
, trackFileN
, trackFileToList
, trackStdin
, trackStdinN
, trackHandle
, trackHandleN
, trackLBS
, trackLBSN
, defaultSampleNum
) where
import DywaPitchTrack
import PitchTrack.Pipes
import qualified Data.ByteString.Lazy as LBS
import Pipes
import qualified Pipes.Prelude as P
import System.IO
trackFile :: FilePath -> (Double -> PitchTrack ()) -> IO ()
trackFile = trackFileN defaultSampleNum
trackFileN :: Int -> FilePath -> (Double -> PitchTrack ()) -> IO ()
trackFileN sampleNum file f = withFileR file $ \ h->
trackHandleN sampleNum h f
trackStdin :: (Double -> PitchTrack ()) -> IO ()
trackStdin = trackStdinN defaultSampleNum
trackStdinN :: Int -> (Double -> PitchTrack ()) -> IO ()
trackStdinN sampleNum = trackHandleN sampleNum stdin
trackHandle :: Handle -> (Double -> PitchTrack ()) -> IO ()
trackHandle = trackHandleN defaultSampleNum
trackHandleN :: Int -> Handle -> (Double -> PitchTrack ()) -> IO ()
trackHandleN sampleNum h f = runPitchTrack sampleNum $
runEffect $ forPitch_ (samplesFromHandle h) f
trackLBS :: LBS.ByteString -> (Double -> PitchTrack ()) -> IO ()
trackLBS = trackLBSN defaultSampleNum
trackLBSN :: Int -> LBS.ByteString -> (Double -> PitchTrack ()) -> IO ()
trackLBSN sampleNum lbs f = runPitchTrack sampleNum $
runEffect $ forPitch_ (samplesFromLBS lbs) f
trackFileToList :: FilePath -> IO [Double]
trackFileToList = trackFileToListN defaultSampleNum
trackFileToListN :: Int -> FilePath -> IO [Double]
trackFileToListN sampleNum file = withFileR file $ \h ->
runPitchTrack sampleNum $ P.toListM $ forPitch (samplesFromHandle h) return
defaultSampleNum :: Int
defaultSampleNum = 2048
withFileR :: FilePath -> (Handle -> IO r) -> IO r
withFileR file = withFile file ReadMode