import Common (parseDestArgs, ) import qualified Sound.ALSA.Sequencer.Address as Addr import qualified Sound.ALSA.Sequencer.Client as Client import qualified Sound.ALSA.Sequencer.Port as Port import qualified Sound.ALSA.Sequencer.Event as Event import qualified Sound.ALSA.Sequencer as SndSeq import qualified Sound.ALSA.Exception as AlsaExc import System.Environment (getArgs, ) main :: IO () main = (do putStrLn "Starting." SndSeq.withDefault SndSeq.Block $ \h -> do Client.setName (h :: SndSeq.T SndSeq.OutputMode) "Haskell-Send-Note" c <- Client.getId h putStrLn ("Created sequencer with id: " ++ show c) Port.withSimple h "out" (Port.caps [Port.capRead, Port.capSubsRead]) Port.typeMidiGeneric $ \ p -> do putStrLn "Created port." conn <- parseDestArgs h (Addr.Cons c p) =<< getArgs let ev n = Event.forConnection conn $ Event.NoteEv n $ Event.simpleNote (Event.Channel 0) (Event.Pitch 60) Event.normalVelocity _ <- Event.outputDirect h $ ev Event.NoteOn putStrLn "press Enter for stopping the note" _ <- getChar _ <- Event.outputDirect h $ ev Event.NoteOff return ()) `AlsaExc.catch` \e -> putStrLn $ "alsa_exception: " ++ AlsaExc.show e