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)