hmeap-0.6: Help/browse.hs
import Control.Monad
import qualified Data.IntMap as Map
import qualified Sound.Analysis.Meapsoft as M
import System.Environment
import System.IO
readMaybe :: Read a => String -> Maybe a
readMaybe s = case reads s of
[(x, "")] -> Just x
_ -> Nothing
readDef :: (Read a) => a -> String -> a
readDef x s = maybe x id (readMaybe s)
browse :: Map.IntMap M.Frame -> IO ()
browse f = do putStr "feature> "
n <- fmap (readDef 0) getLine
putStr "chunk> "
m <- fmap (readDef 0) getLine
putStrLn (show ( "feature", n, M.features !! n
, "chunk", m ))
let (_, _, d) = M.raw_data (f Map.! m)
putStrLn (show (d !! n))
main :: IO ()
main = do hSetBuffering stdout NoBuffering
a <- getArgs
unless (length a == 1) (error "feature-file")
let [f] = a
fs <- M.read_file f
putStrLn (show ("nframes", length fs, "nfeatures", length M.features))
let m = Map.fromList (zip [0..] fs)
forever (browse m)