From ce16c8e93610c668816f6313df096625f509b26b Mon Sep 17 00:00:00 2001 From: PHO Date: Sat, 16 Jul 2011 03:16:58 +0900 Subject: [PATCH] No, getWordsLossless is still incomplete... --- Codec/Audio/WavPack/Words.hs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Codec/Audio/WavPack/Words.hs b/Codec/Audio/WavPack/Words.hs index a8677fe..ae61d8a 100644 --- a/Codec/Audio/WavPack/Words.hs +++ b/Codec/Audio/WavPack/Words.hs @@ -90,8 +90,7 @@ getWordsLossless isMono w0 bs0 nSamples0 let w' = w { wdZeroesAcc = wdZeroesAcc w - 1 } in if wdZeroesAcc w' > 0 then - let v' = New.modify (\mv → MV.unsafeWrite mv n 0) v - n' = n + 1 + let (# n', v' #) = appendWord 0 n v in go0 w' bs n' v' else @@ -111,8 +110,8 @@ getWordsLossless isMono w0 bs0 nSamples0 ( clearMedian $ fst $ wdEntropyData w' , clearMedian $ snd $ wdEntropyData w' ) } - v' = New.modify (\mv → MV.unsafeWrite mv n 0) v - n' = n + 1 + (# n', v' #) + = appendWord 0 n v in go0 w'' bs'' n' v' else @@ -199,16 +198,23 @@ getWordsLossless isMono w0 bs0 nSamples0 = let (# code, bs' #) = readCode bs (high - low) low' = low + code - a = if B.head bs' then + word = if B.head bs' then fromIntegral $ complement low' else fromIntegral low' bs'' = B.tail bs' - v' = New.modify (\mv → MV.unsafeWrite mv n a) v - n' = n + 1 + (# n', v' #) + = appendWord word n v in go0 w bs'' n' v' + appendWord ∷ Int32 → Int → New v Int32 → (# Int, New v Int32 #) + appendWord word n v + = let v' = New.modify (\mv → MV.unsafeWrite mv n word) v + n' = n + 1 + in + (# n', v' #) + getEntropy ∷ Int → WordsData → EntropyData getEntropy n w | isMono = fst $ wdEntropyData w -- 2.40.0