+encodeSamplingRate ∷ Maybe Int → Word8
+encodeSamplingRate (Just 6000) = 0x00
+encodeSamplingRate (Just 8000) = 0x01
+encodeSamplingRate (Just 9600) = 0x02
+encodeSamplingRate (Just 11025) = 0x03
+encodeSamplingRate (Just 12000) = 0x04
+encodeSamplingRate (Just 16000) = 0x05
+encodeSamplingRate (Just 22050) = 0x06
+encodeSamplingRate (Just 24000) = 0x07
+encodeSamplingRate (Just 32000) = 0x08
+encodeSamplingRate (Just 44100) = 0x09
+encodeSamplingRate (Just 48000) = 0x0A
+encodeSamplingRate (Just 64000) = 0x0B
+encodeSamplingRate (Just 88200) = 0x0C
+encodeSamplingRate (Just 96000) = 0x0D
+encodeSamplingRate (Just 192000) = 0x0E
+encodeSamplingRate _ = 0x0F
+
+decodeSamplingRate ∷ Word8 → Maybe Int
+decodeSamplingRate 0x00 = Just 6000
+decodeSamplingRate 0x01 = Just 8000
+decodeSamplingRate 0x02 = Just 9600
+decodeSamplingRate 0x03 = Just 11025
+decodeSamplingRate 0x04 = Just 12000
+decodeSamplingRate 0x05 = Just 16000
+decodeSamplingRate 0x06 = Just 22025
+decodeSamplingRate 0x07 = Just 24000
+decodeSamplingRate 0x08 = Just 32000
+decodeSamplingRate 0x09 = Just 44100
+decodeSamplingRate 0x0A = Just 48000
+decodeSamplingRate 0x0B = Just 64000
+decodeSamplingRate 0x0C = Just 88200
+decodeSamplingRate 0x0D = Just 96000
+decodeSamplingRate 0x0E = Just 192000
+decodeSamplingRate _ = Nothing
+
+-- | Find a WavPack header in a given stream. Returns 'Nothing' if no
+-- headers are found.
+findNextHeader ∷ L.ByteString -- ^ the input
+ → Maybe (BlockHeader, L.ByteString) -- ^ a header and the rest of input