, BlockHeader(..)
, BlockFlags(..)
- , findNextBlock
+ , readBlocks
)
where
import Codec.Audio.WavPack.Metadata
import Data.Binary.BitPut (putBit, putNBits, runBitPut)
import Data.Binary.Get
import Data.Binary.Put
-import qualified Data.Binary.Strict.BitGet as BG
import Data.Binary.Strict.BitGet (getBit, getAsWord8, runBitGet)
+import qualified Data.Binary.Strict.BitGet as BG
import qualified Data.ByteString as S
import qualified Data.ByteString.Lazy as L
import qualified Data.Strict as S
decodeSamplingRate 0x0E = S.Just 192000
decodeSamplingRate _ = S.Nothing
--- | Find a WavPack block in a given stream. Returns 'S.Nothing' if no
--- blocks are found.
-findNextBlock ∷ L.ByteString -- ^ the input
- → (# S.Maybe Block, L.ByteString #) -- ^ the rest of input
+-- | Read WavPack blocks in a given stream lazily.
+readBlocks ∷ L.ByteString → [Block]
+readBlocks src
+ = case findNextBlock src of
+ (# S.Just block, src' #)
+ → block : readBlocks src'
+ (# S.Nothing, _ #)
+ → []
+
+findNextBlock ∷ L.ByteString
+ → (# S.Maybe Block, L.ByteString #)
findNextBlock src
= case L.uncons src of
Nothing