module PitchTrack.Pipes (
samplesFromHandle
, samplesFromLBS
, getPitch
, forPitch
, forPitch_
, 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 :: Handle -> Producer ByteString PitchTrack ()
samplesFromHandle h = do
sampleNum <- lift askSampleNum
PB.hGet (sampleNum * sampleSize) h
samplesFromLBS :: LBS.ByteString -> Producer ByteString PitchTrack ()
samplesFromLBS lbs = do
sampleNum <- lift askSampleNum
PB.fromLazy lbs >-> PB.take sampleNum
getPitch :: Producer ByteString PitchTrack () -> Producer Double PitchTrack ()
getPitch samplesProducer = samplesProducer >-> P.mapM computePitch
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
printPitch :: Producer ByteString PitchTrack () -> Effect PitchTrack ()
printPitch samplesProducer = getPitch samplesProducer >-> P.print