hmt-0.20: Music/Theory/Array/Csv/Midi/Cli.hs
module Music.Theory.Array.Csv.Midi.Cli where
import qualified Music.Theory.Array.Csv.Midi.Mnd as T {- hmt -}
import qualified Music.Theory.Time.Seq as T {- hmt -}
usage :: [String]
usage =
["concat {r} -o output-file input-file..."
,"mnd-to-mndd {i|r} precision:int input-file output-file"
,"mndd-transpose precision:int n:int input-file output-file"]
read_wseq_i :: FilePath -> IO (T.Wseq Double (T.Event Int))
read_wseq_i = T.csv_midi_read_wseq
read_wseq_r :: FilePath -> IO (T.Wseq Double (T.Event Double))
read_wseq_r = T.csv_midi_read_wseq
mnd_to_mndd_i :: Int -> FilePath -> FilePath -> IO ()
mnd_to_mndd_i p i_fn o_fn = do
m <- read_wseq_i i_fn
T.csv_mndd_write_wseq p o_fn m
mndd_transpose_r :: Int -> Double -> FilePath -> FilePath -> IO ()
mndd_transpose_r p k i_fn o_fn = do
m <- read_wseq_r i_fn
let f (t,(mnn,vel,ch,pr)) = (t,(mnn + k,vel,ch,pr))
T.csv_mndd_write_wseq p o_fn (map f m)
csv_midi_concat_r :: FilePath -> [FilePath] -> IO ()
csv_midi_concat_r o_fn i_fn = do
i <- mapM read_wseq_r i_fn
T.csv_mndd_write_wseq 4 o_fn (T.wseq_concat i)
csv_midi_cli :: [String] -> IO ()
csv_midi_cli arg =
case arg of
"concat":"r":"-o":o_fn:i_fn -> csv_midi_concat_r o_fn i_fn
["mnd-to-mndd","i",p,i_fn,o_fn] -> mnd_to_mndd_i (read p) i_fn o_fn
["mndd-transpose","r",p,k,i_fn,o_fn] -> mndd_transpose_r (read p) (read k) i_fn o_fn
_ -> putStrLn (unlines usage)
{-
fn = "/home/rohan/uc/invisible/heliotrope/csv/rough/00.csv"
mnd_to_mndd_i 4 fn "/tmp/t-mndd.csv"
mndd_transpose_r 4 (-12) fn "/tmp/t-trs.csv"
-}