{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE LambdaCase #-}
module Main where
import System.Environment (getArgs)
import qualified Sound.PortMidi.Simple as Midi
main :: IO ()
main = do
getArgs >>= \case
[] -> do
devices <- Midi.getDevices
mapM_ print devices
some ->
example $ unwords some
example :: [Char] -> IO ()
example name =
Midi.withMidi $
Midi.findInputNamed name >>= \case
Nothing ->
fail $ "Input device not found: " <> show name
Just device -> do
putStrLn $ "Dumping from " <> show name
Midi.withInput device \stream ->
Midi.withReadMessages stream 256 \readMessages -> do
putStrLn "Tweak knobs and press Enter..."
_ <- getLine
readMessages >>= mapM_ print