X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=wavpack.git;a=blobdiff_plain;f=Codec%2FAudio%2FWavPack%2FMetadata.hs;h=bc1d07c3bd2059f940546b9fc2ad4bb18a65f00a;hp=77901f445aedf505ab7e4ce117ae026ebdd147c7;hb=acfc910ebb15715da125f86d473ab907f7f95698;hpb=9128d47e1f753b82477535a1116b3a4f416243fc diff --git a/Codec/Audio/WavPack/Metadata.hs b/Codec/Audio/WavPack/Metadata.hs index 77901f4..bc1d07c 100644 --- a/Codec/Audio/WavPack/Metadata.hs +++ b/Codec/Audio/WavPack/Metadata.hs @@ -9,6 +9,8 @@ module Codec.Audio.WavPack.Metadata , SubBlock , Dummy(..) + , RIFFHeader(..) + , RIFFTrailer(..) , Unknown(..) ) where @@ -86,6 +88,8 @@ instance Binary SubBlock where where getSubBlock ∷ Word8 → Get SubBlock getSubBlock 0x00 = fmap SubBlock (get ∷ Get Dummy) + getSubBlock 0x21 = fmap SubBlock (get ∷ Get RIFFHeader) + getSubBlock 0x22 = fmap SubBlock (get ∷ Get RIFFTrailer) getSubBlock unknownID = if unknownID .&. 0x20 ≡ 0 then fail ("Unknown WavPack metadata ID: " ⧺ show unknownID) @@ -117,6 +121,34 @@ instance Binary Dummy where put = putLazyByteString ∘ flip L.replicate 0x00 ∘ fromIntegral ∘ dumSize get = fmap (Dummy ∘ fromIntegral) remaining +-- | RIFF header for .wav files (before audio) +data RIFFHeader + = RIFFHeader { + riffHeader ∷ L.ByteString + } + deriving (Eq, Show, Typeable) + +instance Metadata RIFFHeader where + metaID _ = 0x21 + +instance Binary RIFFHeader where + put = putLazyByteString ∘ riffHeader + get = fmap RIFFHeader getRemainingLazyByteString + +-- | RIFF trailer for .wav files (after audio) +data RIFFTrailer + = RIFFTrailer { + riffTrailer ∷ L.ByteString + } + deriving (Eq, Show, Typeable) + +instance Metadata RIFFTrailer where + metaID _ = 0x22 + +instance Binary RIFFTrailer where + put = putLazyByteString ∘ riffTrailer + get = fmap RIFFTrailer getRemainingLazyByteString + -- | Unknown but optional metadata found in the WavPack block. data Unknown = Unknown { @@ -130,7 +162,6 @@ data Unknown instance Metadata Unknown where metaID = unkID - metaSize = fromIntegral ∘ L.length ∘ unkData instance Binary Unknown where put = putLazyByteString ∘ unkData