import qualified Sound.Alsa.Sequencer as ALSA import Sound.Alsa.Sequencer ( caps, cap_read, cap_subs_read, type_midi_generic, set_client_name, get_client_id, Addr(Addr), addr_client, addr_port, addr_subscribers, Event(Event), event_output_direct, ev_high_priority, ev_tag, ev_queue, ev_timestamp, ev_source, ev_dest, ev_data, queue_direct, TimeStamp(TickTime), EventData(NoteEv), NoteEv(NoteOn), simple_note, alsa_catch, exception_description, ) main :: IO () main = (do putStrLn "Starting." ALSA.with ALSA.default_seq_name ALSA.Block $ \h -> do set_client_name (h :: ALSA.SndSeq ALSA.OutputMode) "HS test client" putStrLn "Created sequencer." ALSA.with_simple_port h "one" (caps [cap_read,cap_subs_read]) type_midi_generic $ \ p -> do putStrLn "Created port." x <- get_client_id h putStrLn ("My id is: " ++ show x) let me = Addr { addr_client = x, addr_port = p } getChar event_output_direct h (e1 me) getChar return ()) `alsa_catch` \e -> putStrLn ("Problem: " ++ exception_description e) e1 :: Addr -> Event e1 me = Event { ev_high_priority = False , ev_tag = 0 , ev_queue = queue_direct , ev_timestamp = TickTime 0 , ev_source = me , ev_dest = addr_subscribers , ev_data = NoteEv NoteOn (simple_note 0 60 100) }