]> gitweb @ CieloNegro.org - wavpack.git/blobdiff - examples/WvInfo.hs
still working on decorrStereoPass
[wavpack.git] / examples / WvInfo.hs
index 78588ab29d3e3f6e5cdf12f09f3a9124eacc824f..6631c7b47fcf9ebc6f864b0ef66c33b3d8044c25 100644 (file)
@@ -3,17 +3,49 @@
   #-}
 module Main where
 import Codec.Audio.WavPack.Block
+import Codec.Audio.WavPack.Metadata
 import qualified Data.ByteString.Lazy as L
+import Data.Maybe
+import Prelude.Unicode
 import System.Environment
+import System.IO
 
 main ∷ IO ()
 main = do [wvFile] ← getArgs
-          wvStream ← L.readFile wvFile
-          showWvInfo wvStream
+          wvData   ← L.readFile wvFile
+          hSetBuffering stdout NoBuffering
+          mapM_ printBlock $ readBlocks wvData
+          putStrLn "* End of WavPack blocks"
 
-showWvInfo ∷ L.ByteString → IO ()
-showWvInfo stream
-    = case findNextHeader stream of
-        (Just bh, _)
-            → print bh
-        _   → fail "Can't find any WavPack block headers."
+printBlock ∷ Block → IO ()
+printBlock b
+    = do putStrLn "* WavPack Block"
+         putStrLn "- Block header:"
+         print $ blockHeader b
+         putStrLn "- Block metadata sub-blocks:"
+         mapM_ printSub $ blockMetadata b
+    where
+      printSub ∷ SubBlock → IO ()
+      printSub sub
+          | isJust (fromSubBlock sub ∷ Maybe WVBitstream)
+              = putStrLn ( "(WV Bitstream omitted: " ⧺
+                           show (metaSize sub) ⧺
+                           " bytes)"
+                         )
+          | otherwise
+              = print sub
+
+{- % du -sh 01.wv
+   15716
+
+   When compiled with -O0:
+   % time ./dist/build/hs-wvinfo/hs-wvinfo 01.wv > /dev/null
+   1.49s user 2.12s system 98% cpu 3.664 total
+
+   When compiled with -O2:
+   % time ./dist/build/hs-wvinfo/hs-wvinfo 01.wv > /dev/null
+   1.35s user 2.09s system 97% cpu 3.520 total
+
+   Hmm... quite disappointing...  The stringification is the
+   bottleneck? If so, I can live with that.
+-}