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.Queue as Queue import qualified Sound.ALSA.Sequencer as SndSeq import qualified Sound.ALSA.Exception as AlsaExc main :: IO () main = (do putStrLn "Starting." SndSeq.with SndSeq.defaultName SndSeq.Block $ \h -> do Client.setName (h :: SndSeq.T SndSeq.OutputMode) "HS3" putStrLn "Created sequencer." x <- Client.getId h putStrLn ("My id is: " ++ show x) let me = Addr.Cons { Addr.client = x, Addr.port = Port.unknown } -- tgt_addr <- parse_address h "HS1:255" let tgt_addr = Addr.Cons Client.broadcast Port.unknown print tgt_addr getChar Event.outputDirect h (e1 me tgt_addr) getChar return ()) `AlsaExc.catch` \e -> putStrLn $ "alsa_exception: " ++ AlsaExc.show e e1 :: Addr.T -> Addr.T -> Event.T e1 from to = Event.Cons { Event.highPriority = False , Event.tag = 0 , Event.queue = Queue.direct , Event.timestamp = Event.TickTime 0 , Event.source = from , Event.dest = to , Event.body = Event.NoteEv Event.NoteOn (Event.simpleNote 0 60 100) }