module PitchTrack.Pipes (
samplesFromHandle
, samplesFromLBS
, forPitch
, forPitch_
, getPitch
, printPitch
) where
import DywaPitchTrack
import Data.ByteString (ByteString)
import qualified Data.ByteString.Lazy as LBS
import Pipes
import qualified Pipes.ByteString as PB
import qualified Pipes.Prelude as P
import System.IO
samplesFromHandle :: Int -> Handle -> Producer ByteString PitchTrack ()
samplesFromHandle sampleNum = PB.hGet (sampleNum * sampleSize)
samplesFromLBS :: Int -> LBS.ByteString -> Producer ByteString PitchTrack ()
samplesFromLBS sampleNum lbs = PB.fromLazy lbs >-> PB.take sampleNum
forPitch :: Producer ByteString PitchTrack () -> (Double -> PitchTrack a) -> Producer a PitchTrack ()
forPitch samplesProducer f = getPitch samplesProducer >-> P.mapM f
forPitch_ :: Producer ByteString PitchTrack () -> (Double -> PitchTrack ()) -> Effect PitchTrack ()
forPitch_ samplesProducer f = getPitch samplesProducer >-> P.mapM_ f
getPitch :: Producer ByteString PitchTrack () -> Producer Double PitchTrack ()
getPitch samplesProducer = samplesProducer >-> P.mapM computePitch
printPitch :: Producer ByteString PitchTrack () -> Effect PitchTrack ()
printPitch samplesProducer = getPitch samplesProducer >-> P.print