VMC`      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_M (should be in a more general ALSA module  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"system client # dummy ports $OSS sequencer emulator %system timer port &system announce port '()*+,-./0123456789:;<=>?@ABCD+From a list of expressions choose the one,  whose condition holds. EFGHIJKLM  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM      !"#$%&'()T~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUPSRQMONABCDEFGHIJKL?@*+,-=>. ;<:798/016 543210/.-,+*)('&%$#"!3456789:;2=>?@ABC<DEFGHIJKLM  543210/.-,+*)('&%$#"!!"#$%&'()*+,-./012345679889:;<<=>>?@@A BCDEFGHIJKLBCDEFGHIJKLMONNOPSRQQRST~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~           !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM`NabOPQR0Process MIDI events from ALSA in a lazy manner. (The processing function must be strict, Ein order to let the cleanup take place after abandoning the process. STU8This function checks whether the ALSA sequencer message Lis a MIDI channel message and converts to the corresponding data structure. @Note that ALSA sequencer events contain MIDI realtime messages, (MIDI file events and additional events. 4We do not want to define yet another data structure additionally to BA. and the message types from the midi package. Instead, because we believe, Hthat most of the time you cope with certain types of events in bundles, <we provide functions that allow easy access to these types. :Currently we provide only access to MIDI channel messages !but that can be easily extended. ?Multiple handlers of certain event types can be composed using Control.Monad.mplus. TNoteOn events with zero velocity are not automatically converted to NoteOff events, this can be done with the 0Sound.MIDI.Message.Channel.Voice.explicitNoteOff function. cdeVWXY?Strangly ALSA returns error code 2 (No such file or directory) (if the destination port does not exist. Z[\f]^gMNOPQRSTUVWXYZ[\]^\S]^RTXY[ZOPQMNUVWMNNOPQRSTUVWXYZ[\]^h____i      !"#$%&'()*+,-./0123456789:;<=>>??@@AABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXFYZ[\]^_`a alsa-midi-0.4Sound.ALSA.Sequencer.FFISound.ALSA.SequencerSound.ALSA.Sequencer.Playset_queue_tempoget_queue_tempoqueue_tempo_set_ppqqueue_tempo_set_tempoqueue_tempo_freequeue_tempo_malloc free_queue alloc_queuealloc_named_queuedelete_simple_portcreate_simple_port event_input drain_output event_output client_idset_client_namecloseopen str_errorFlagSet unFlagSetPortCapabilityPortCapNoExportPortCapSubsWritePortCapSubsRead PortCapDuplexPortCapSyncWritePortCapSyncRead PortCapWrite PortCapReadPortCapabilitySetPortTypePortTypeApplication PortType19 PortType18 PortType17 PortType16 PortType15 PortType14 PortType13PortTypeSamplePortTypeDirectSample PortTypeSynth PortType09 PortType08 PortType07 PortType06PortTypeMIDIMT32PortTypeMIDIXGPortTypeMIDIGSPortTypeMIDIGMPortTypeMIDIGenericPortTypeSpecific PortTypeSetOpen OpenInput OpenOutputOpenModeTempo ReturnCode EnumBitPosEventtyptagqueuetimetimeMode eventLengthprioritysourcedest eventDataPriority PriorityHighPriorityNormal EventLengthEventLengthVariableUserEventLengthVariableEventLengthFixed EventType EventUserVar4 EventUserVar3 EventUserVar2 EventUserVar1 EventUserVar0 EventPad134 EventPad133 EventPad132 EventBounceEventSystemExclusive EventPad129 EventPad128 EventPad127 EventPad126 EventPad125 EventPad124 EventPad123 EventPad122 EventPad121 EventPad120 EventPad119EventInstrumentChangeEventInstrumentClusterResultEventInstrumentClusterGetEventInstrumentClusterEventInstrumentListResultEventInstrumentListEventInstrumentFreeEventInstrumentGetResultEventInstrumentGetEventInstrumentPutEventInstrumentStatusResultEventInstrumentStatusEventInstrumentResetEventInstrumentFormatInfoResultEventInstrumentFormatInfoEventInstrumentInfoResultEventInstrumentInfoEventInstrumentEndEventInstrumentBegin EventUser9 EventUser8 EventUser7 EventUser6 EventUser5 EventUser4 EventUser3 EventUser2 EventUser1 EventUser0 EventPad089 EventPad088 EventPad087 EventPad086 EventPad085 EventPad084 EventPad083 EventPad082 EventPad081 EventPad080 EventPad079EventSamplePrivate1EventSamplePositionEventSampleLoopEventSampleVolumeEventSampleFrequencyEventSampleStopEventSampleStartEventSampleCluster EventSample EventPad069 EventPad068EventPortUnsubscribedEventPortSubscribedEventPortChange EventPortExitEventPortStartEventClientChangeEventClientExitEventClientStart EventPad059 EventPad058 EventPad057 EventPad056 EventPad055 EventPad054 EventPad053 EventPad052EventOSS EventEcho EventPad049 EventPad048 EventPad047 EventPad046 EventPad045 EventPad044 EventPad043 EventSensing EventResetEventTuneRequest EventSyncPosEventQueueSkew EventTick EventClock EventTempoEventSetPositionTimeEventSetPositionTick EventStop EventContinue EventStart EventPad029 EventPad028 EventPad027 EventPad026 EventPad025 EventKeySign EventTimeSignEventQuarterFrameEventSongSelectEventSongPosition EventPad019 EventPad018 EventPad017EventRegisteredParameterEventNonRegisteredParameterEventControl14EventPitchBendEventChannelPressureEventProgramChangeEventController EventPad009EventKeyPressure EventNoteOff EventNoteOn EventNote EventPad004 EventPad003 EventPad002 EventResult EventSystem QueueControlQueueControlData8QueueControlData32QueueControlPositionQueueControlTimeQueueControlValueQueueAddressclientportPortClientId TimeStamp TimeStampReal TimeStampTickTimeModeTimeModeRelativeTimeModeAbsoluteTimeUnit TimeUnitTick TimeUnitRealTickTimetv_ticksRealTimetv_sectv_nsec TimeValueEventDataUnionFixedConnect connectSender connectDestQueueEvqueueId queueControlControlcontrolChannelcontrolParameter controlValueNote noteChannel notePitch noteVelocitynoteOffVelocity noteDuration DataUnknownTCons isConnectisFixedisNote isController peekEventData peekConnectpeekNote peekControl pokeEventData peekTimeStamp pokeTimeStamp clientSystem clientDummy clientOSSportSystemTimerportSystemAnnounce addressTimer queueDirectpokeQueueControl timeUnitBit timeModeBiteventLengthBit priorityBitcheck openOutput openInput openDuplexportTypeSpecificportTypeMIDIGenericportTypeMIDIGMportTypeMIDIGSportTypeMIDIXGportTypeMIDIMT32 portTypeSynthportTypeDirectSampleportTypeSampleportTypeApplication portCapRead portCapWriteportCapSyncReadportCapSyncWrite portCapDuplexportCapSubsReadportCapSubsWriteportCapNoExportselect flagToWord flagsToWord wordToFlags intToFlags unpackEnumpackEnum enumToChar enumFromCharClientsequencerHandle portAddress numAddressnumAddressEither withEvents deleteClient receiveEventeventToChannelMsgeventFromChannelMsgeventFromMetaEventsendPlainEvent drainOutputwithNamedQueueinitQueueTempo createClientcreateInputPortcreateOutputPortrunportsclientId ioToLazyListmkNote mkControl createPort deletePortmkEvent