diff --git a/pitchtrack.cabal b/pitchtrack.cabal
--- a/pitchtrack.cabal
+++ b/pitchtrack.cabal
@@ -1,5 +1,5 @@
 name: pitchtrack
-version: 0.1.0.0
+version: 0.1.0.1
 cabal-version: >=1.10
 build-type: Simple
 license: MIT
@@ -11,7 +11,7 @@
 description:
     Pitch tracking library, based on <http://www.schmittmachine.com/dywapitchtrack.html dywapitchtrack>.
     .
-    See the "PitchTrack" module for an easy, "ready to use" interface,
+    See the "PitchTrack.Track" module for an easy, "ready to use" interface,
     or "PitchTrack.Pipes" for Pipes-based components, if you need more flexibility.
     .
     Note that because all parameters are hard-coded into the C library,
@@ -44,7 +44,7 @@
     build-depends:
         base ==4.8.*,
         bytestring >=0.10.6.0 && <0.11,
-        dywapitchtrack >=0.1.0.0 && <0.2,
+        dywapitchtrack >=0.1.0.1 && <0.2,
         pipes >=4.1.6 && <4.2,
         pipes-bytestring >=2.1.1 && <2.2,
         process >=1.2.3.0 && <1.3,
@@ -59,7 +59,7 @@
     build-depends:
         base ==4.8.*,
         bytestring >=0.10.6.0 && <0.11,
-        dywapitchtrack >=0.1.0.0 && <0.2,
+        dywapitchtrack >=0.1.0.1 && <0.2,
         hspec >=2.2.0 && <2.3,
         pipes >=4.1.6 && <4.2,
         pipes-bytestring >=2.1.1 && <2.2,
diff --git a/src/PitchTrack.hs b/src/PitchTrack.hs
--- a/src/PitchTrack.hs
+++ b/src/PitchTrack.hs
@@ -1,9 +1,14 @@
 module PitchTrack (
+-- * Base type
+    PitchTrack
+  , runPitchTrack
 -- * Re-exported modules
-    module PitchTrack.Track
+  , module PitchTrack.Track
+  , module PitchTrack.Pipes
 -- * Utilities
   , neededSampleNum
   ) where
 
-import           DywaPitchTrack   (neededSampleNum)
+import           DywaPitchTrack
+import           PitchTrack.Pipes
 import           PitchTrack.Track
diff --git a/src/PitchTrack/Pipes.hs b/src/PitchTrack/Pipes.hs
--- a/src/PitchTrack/Pipes.hs
+++ b/src/PitchTrack/Pipes.hs
@@ -1,9 +1,9 @@
 module PitchTrack.Pipes (
     samplesFromHandle
   , samplesFromLBS
+  , getPitch
   , forPitch
   , forPitch_
-  , getPitch
   , printPitch
   ) where
 
@@ -17,13 +17,21 @@
 import           System.IO
 
 -- | Stream chunks of a fixed number of samples from a handle
-samplesFromHandle :: Int -> Handle -> Producer ByteString PitchTrack ()
-samplesFromHandle sampleNum = PB.hGet (sampleNum * sampleSize)
+samplesFromHandle :: Handle -> Producer ByteString PitchTrack ()
+samplesFromHandle h = do
+    sampleNum <- lift askSampleNum
+    PB.hGet (sampleNum * sampleSize) h
 
 -- | Stream chunks of a fixed number of samples from a lazy 'LBS.ByteString'
-samplesFromLBS :: Int -> LBS.ByteString -> Producer ByteString PitchTrack ()
-samplesFromLBS sampleNum lbs = PB.fromLazy lbs >-> PB.take sampleNum
+samplesFromLBS :: LBS.ByteString -> Producer ByteString PitchTrack ()
+samplesFromLBS lbs = do
+    sampleNum <- lift askSampleNum
+    PB.fromLazy lbs >-> PB.take sampleNum
 
+-- | Stream computed pitches
+getPitch :: Producer ByteString PitchTrack () -> Producer Double PitchTrack ()
+getPitch samplesProducer = samplesProducer >-> P.mapM computePitch
+
 -- | Apply a function to each pitch
 forPitch :: Producer ByteString PitchTrack () -> (Double -> PitchTrack a) -> Producer a PitchTrack ()
 forPitch samplesProducer f = getPitch samplesProducer >-> P.mapM f
@@ -31,10 +39,6 @@
 -- | Consume all pitches, applying a function to each one
 forPitch_ :: Producer ByteString PitchTrack () -> (Double -> PitchTrack ()) -> Effect PitchTrack ()
 forPitch_ samplesProducer f = getPitch samplesProducer >-> P.mapM_ f
-
--- | Stream computed pitches
-getPitch :: Producer ByteString PitchTrack () -> Producer Double PitchTrack ()
-getPitch samplesProducer = samplesProducer >-> P.mapM computePitch
 
 -- | Print all pitches
 printPitch :: Producer ByteString PitchTrack () -> Effect PitchTrack ()
diff --git a/src/PitchTrack/Track.hs b/src/PitchTrack/Track.hs
--- a/src/PitchTrack/Track.hs
+++ b/src/PitchTrack/Track.hs
@@ -59,7 +59,7 @@
 -- | Same as 'trackHandle', but takes the number of samples as a first parameter
 trackHandleN :: Int -> Handle -> (Double -> PitchTrack ()) -> IO ()
 trackHandleN sampleNum h f = runPitchTrack sampleNum $
-    runEffect $ forPitch_ (samplesFromHandle sampleNum h) f
+    runEffect $ forPitch_ (samplesFromHandle h) f
 
 -- | Track a lazy 'LBS.ByteString' and apply a function to each computed pitch
 trackLBS :: LBS.ByteString -> (Double -> PitchTrack ()) -> IO ()
@@ -68,7 +68,7 @@
 -- | Same as 'trackLBS', but takes the number of samples as a first parameter
 trackLBSN :: Int -> LBS.ByteString -> (Double -> PitchTrack ()) -> IO ()
 trackLBSN sampleNum lbs f = runPitchTrack sampleNum $
-    runEffect $ forPitch_ (samplesFromLBS sampleNum lbs) f
+    runEffect $ forPitch_ (samplesFromLBS lbs) f
 
 -- | Track a file and return a list of all the computed pitches
 --
@@ -78,7 +78,7 @@
 
 trackFileToListN  :: Int -> FilePath -> IO [Double]
 trackFileToListN sampleNum file = withFileR file $ \h ->
-    runPitchTrack sampleNum $ P.toListM $ forPitch (samplesFromHandle sampleNum h) return
+    runPitchTrack sampleNum $ P.toListM $ forPitch (samplesFromHandle h) return
 
 -- | The default number of samples used for each computation (2048)
 defaultSampleNum :: Int
