X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=wavpack.git;a=blobdiff_plain;f=Codec%2FAudio%2FWavPack%2FUnpack.hs;fp=Codec%2FAudio%2FWavPack%2FUnpack.hs;h=8d2790619f2f5440511b54a95b9c035cfd9256f7;hp=0000000000000000000000000000000000000000;hb=37c42ce6bcf9fef0a16b9c142288a2655a2b3556;hpb=db3548d79ebddbc0927c06ece435d61d241c1644 diff --git a/Codec/Audio/WavPack/Unpack.hs b/Codec/Audio/WavPack/Unpack.hs new file mode 100644 index 0000000..8d27906 --- /dev/null +++ b/Codec/Audio/WavPack/Unpack.hs @@ -0,0 +1,28 @@ +{-# LANGUAGE + BangPatterns + , UnicodeSyntax + #-} +module Codec.Audio.WavPack.Unpack + ( + ) + where +import Codec.Audio.WavPack.Internal +import Data.Bits +import Data.Bitstream.Generic (Bitstream) +import qualified Data.Bitstream.Generic as B +import Data.Word + +-- Read a single unsigned value from the specified bitstream with a +-- value from 0 to maxCode. If there are exactly a power of two number +-- of possible codes then this will read a fixed number of bits; +-- otherwise it reads the minimum number of bits and then determines +-- whether another bit is needed to define the code. +readCode ∷ Bitstream bs ⇒ bs → Word32 → (Word32, bs) +{-# INLINEABLE readCode #-} +readCode bs 0 = (0, bs) +readCode bs 1 = (b2n $ B.head bs, B.tail bs) +readCode bs maxCode + = let !bitCount = countBits maxCode + !extras = (1 `shiftL` bitCount) - maxCode - 1 + in + error "unk" \ No newline at end of file