!W %      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~         !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG H I J K LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~             !"#$(J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalSafe%&'()*+,-./0123E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalSafe%[alsa-seqThe type of sequencer handles.alsa-seq*Blocking behavior of the sequencer device.alsa-seqOperations may block.alsa-seq%Throw exceptions instead of blocking. alsa-seq}Read/Write permissions for the sequencer device. This way we prevent the ALSA exception 22 "Invalid argument" when calling  event_output on an input-only sequencer.45 67Safe%  Safe&SafeWalsa-seq{Creates a new handle and opens a connection to the kernel sequencer interface. After a client is created successfully, a  ClientStartN event is broadcast to the announce port. May throw an exception. See also:  open_lconf, ,  get_seq_type,  get_seq_name,  set_blocking,  get_client_id.alsa-seqvClose the sequencer. Closes the sequencer client and releases its resources. After a client is closed, an event with  ClientExit is broadcast to announce port. The connection between other clients are disconnected. Call this just before exiting your program. NOTE: we could put this in a finalizer for the handle?alsa-seq*This is the name that should be passed to  in most cases.alsa-seqZGet identifier of a sequencer handle. It is the same identifier specified in the call to .alsa-seqcChange the blocking mode of the given client. In block mode, the client falls into sleep when it fills the output pool with events, or when it demands events from an empty input pool. memory pool with full events. Clients that are sleeping due to loack of space in the output pool are woken when a certain amount of free space becomes available (see set_output_room).alsa-seq*Return the byte size of the output buffer.alsa-seqJResize of the output buffer. This function clears all output events (see  drop_output).alsa-seq%Return the byte size of input buffer.alsa-seqEResize the input buffer. This function clears all input events (see  drop_input). alsa-seqResize the output memory pool.!alsa-seq|Specify how much space should become free before waking clients that are blocked due to a lack of space in the output pool."alsa-seqReset the output pool.#alsa-seqResize the input memory pool.$alsa-seqReset the input pool.alsa-seqThe sequencer's "name". This is not a name that you make up for your own purposes; it has special significance to the ALSA library. Usually you need to pass  here or simply use .alsa-seqBlocking behavioralsa-seqHandle to the sequencer.alsa-seqBlocking behavioralsa-seqHandle to the sequencer.alsa-seqhandle to the sequenceralsa-seqThe sequencer's "name". This is not a name that you make up for your own purposes; it has special significance to the ALSA library. Usually you need to pass  here or simply use .alsa-seqBlocking behavioralsa-seq>Action on the sequencer, the result must be computed strictly.alsa-seqsequencer handlealsa-seqALSA identifier for the handlealsa-seqsequencer handlealsa-seq blocking modealsa-seqSequencer handle.alsa-seqSize of output buffer in bytes.alsa-seqSequencer handle.alsa-seqNew buffer size in bytes.alsa-seqSequencer handle.alsa-seqSize of input buffer in bytes.alsa-seqSequencer handle.alsa-seqNew byffer size in bytes. alsa-seqSequencer handle.alsa-seqNew size in bytes.!alsa-seqSequencer handle.alsa-seq Number of bytes need to wake up."alsa-seqSequencer handle.#alsa-seqSequencer handle.alsa-seqNew size in bytes.$alsa-seqSequencer handle.89:;<=>?@ABCDE !"#$E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalSafeY  !"#$   !"#$SafeZFGHSafe[<%&('Safe^)alsa-seq!Convert number of nanoseconds to %*alsa-seq(Convert fractional number of seconds to % Time must be non-negative.,alsa-seq!Convert number of nanoseconds to %-alsa-seq(Convert fractional number of seconds to % %&'()*+,-. %&'(*+)-.,Safe_IJ/01243K56879:LMNOPQRSTUSafe` /0123456789: 56789:234/01E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneMb;alsa-seqThe type of queue identifiers. VWXYZ[\;]^_<J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneh`alsa-seq,Copy the content of one object into another.aalsa-seq0Allocate an uninitialized object. (Not exported)Calsa-seq8Copy the content of an object to a newly created object.Balsa-seq Destinationalsa-seqSource=>?@ABCDEFGHIJADEBCFGIHJ=>?@J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNonenJbalsa-seq0Allocate an uninitialized object. (Not exported)Ralsa-seq8Copy the content of an object to a newly created object.Walsa-seq,Copy the content of one object into another.Qalsa-seq Destinationalsa-seqSourcePQRSTUVWXYZ[\]PSTQRUVXZ\WY[] J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNonet`alsa-seq,Copy the content of one object into another.aalsa-seq8Copy the content of an object to a newly created object.calsa-seq0Allocate an uninitialized object. (Not exported)`alsa-seq Destinationalsa-seqSource_`abcdef_b`aefcd E(c) Henning Thielemann, 2011 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneMhalsa-seq Port types.ialsa-seqPort capabilities.calsa-seq<a type that cannot be represented by the other constructors dalsa-seqhardware specific ealsa-seqgeneric MIDI device falsa-seqGeneral MIDI compatible device galsa-seqGS compatible device halsa-seqXG compatible device ialsa-seqMT-32 compatible device jalsa-seq!General MIDI 2 compatible device kalsa-seq Synth device lalsa-seq*Sampling device (support sample download) malsa-seq7Sampling device (sample can be downloaded at any time) nalsa-seq&This port is implemented in hardware. oalsa-seq&This port is implemented in software. palsa-seq1Messages sent to this port will generate sounds. qalsa-seqkThis port may connect to other devices (whose characteristics are not known). ralsa-seqapplication (sequencer/editor) salsa-seqBa capability that cannot be represented by the other constructors talsa-seqreadable from this port ualsa-seqwritable to this port valsa-seqallow read subscriptions walsa-seqallow write subscriptions xalsa-seqallow read/write duplex yalsa-seqallow read subscription zalsa-seqallow write subscription {alsa-seqrouting not allowed |alsa-seqpThe Enum instance may not be very efficient, but it should hardly be used, at all. Better use constants such as o and set manipulation. If the binary logarithm is computed by constant unfolding, performance would be better, but direct set manipulation is still faster. We implement the }| instance in this way, in order to stay independent from the particular ALSA definitions, that may differ between platforms.?hi~rqponmlkjihgfedc{zyxwvutsjklmnopqrstuvwxyz{|}~!E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneM6alsa-seqThe different types of clients.alsa-seqThe type of client identifiers.  J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNonealsa-seq,Copy the content of one object into another.alsa-seq0Allocate an uninitialized object. (Not exported)alsa-seq8Copy the content of an object to a newly created object.alsa-seq Destinationalsa-seqSource"J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNonejalsa-seq,Copy the content of one object into another.alsa-seqJCreate a new information area filled with data about the sequencer client.alsa-seq0Allocate an uninitialized object. (Not exported)alsa-seq8Copy the content of an object to a newly created object.ICreate a new information area filled with data about an arbitrary client.alsa-seq^Set the information for the sequencer client based on the data in the given information area.alsa-seqBGet information about the client with the next biggest identifier.alsa-seq Destinationalsa-seqSourcealsa-seqWas there a next client?)NoneMM E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNonealsa-seqEGet the client identifier for the sequencer. A convinience function.alsa-seq?Set the name for the sequencer client. A convinience function. #NoneCalsa-seq$The address of all subscribed ports. ?(c) Henning Thielemann, 2012 (c) Dylan Simon, 2011BSD3 provisionalNone alsa-seq8Copy the content of an object to a newly created object.alsa-seq&Get the client/port address of a queryalsa-seq,Copy the content of one object into another.alsa-seq0Allocate an uninitialized object. (Not exported)alsa-seq&Set the client/port address of a queryalsa-seq&Get the address of subscriber of queryalsa-seqQuery port subscriber listalsa-seqJQueries a subscriber connected to (Write) or from (Read) a given address:  seq addr typ indexalsa-seq0Queries the list of subscribers accessing a portalsa-seq Destinationalsa-seqSource?(c) Henning Thielemann, 2012 (c) Dylan Simon, 2011BSD3 provisionalNone alsa-seq,Copy the content of one object into another..Set destination address of a port subscriptionalsa-seq)Get sender address of a port subscriptionalsa-seq&Unsubscribe a connection between portsalsa-seq)Set sender address of a port subscriptionalsa-seq.Get destination address of a port subscriptionalsa-seq8Copy the content of an object to a newly created object.alsa-seq0Allocate an uninitialized object. (Not exported)alsa-seqSubscribe a port connectionalsa-seqSubscribe a port connection: subscribeSimple5 sender dest exclusive (Just (updatequeue, realtime))alsa-seqUnsubscribe a port connection: unsubscribeSimple sender destalsa-seq Destinationalsa-seqSource$J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneP alsa-seqVCreate a new information area filled with data about an given port on a given client.alsa-seq(Get the address of the information area.alsa-seqSCreate a new information area filled with data about a specific port on our client.alsa-seq0Allocate an uninitialized object. (Not exported)alsa-seq[Set the information for the sequencer port based on the data in the given information area. alsa-seq,Copy the content of one object into another.alsa-seq8Copy the content of an object to a newly created object.alsa-seqSet the port address."alsa-seq3Get information about the first port on our client.#alsa-seqGet information about the port with the next biggest identifier. If a matching port is found, then its information is stored in the given area and  is returned.alsa-seq Destinationalsa-seqSourceH      !"#J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneM_$%&'()*+,-./0123456789:;<=>?@A$%&'()*+,-./0123456789:;<=>?@AJ(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone5$      !"#EF$!"#EF       E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneݣGalsa-seqCreate a port - simple version.Halsa-seqDelete the port.Jalsa-seq6Create a new port, as described by the info structure.Kalsa-seqDelete the port.%hijklmnopqrstuvwxyz{|}~GHIJK%jkJGKHIlmniopqrstuvwhxyz{|}~%NoneLMON&J(c) Henning Thielemann, 2011-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneMPVUTSXWRQYZ\[]cba`_^dkjihgfelxwvutsrqponmy~}|{zJ(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneqalsa-seqDelete the specified queue.alsa-seqstartstopcontinue a queueaIn the prototype event you can provide additional information. The prototype event does not need to be a queue control event, this part is ignored anyway. In the prototype event you may also specify a queue. This is the queue that the timestamp of the prototype event refers to. This way you can control the target queue using timing from another queue.alsa-seqQueue.T identifier.alsa-seqSequencer handle.alsa-seqQueue.T identifier.alsa-seqSequencer handle.alsa-seqtarget Queue.T.alsa-seq8prototype event that may provide timestamp, source queue;<;<'None  J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone(NoneMQalsa-seq0Allocate an uninitialized object. (Not exported)alsa-seq8Copy the content of an object to a newly created object.alsa-seq/Remove events according to the given conditionsalsa-seq,Copy the content of one object into another.alsa-seq Destinationalsa-seqSource     NoneM\alsa-seq:apply the changes in the Remove monad to the Remove recordalsa-seq/Remove events according to the given conditionsalsa-seqyAll events in the local input buffer are removed. The conditions are not checked for these events. This is equivalent to )*.alsa-seqMatching events in the local output buffer are removed, too. Matching events in the kernel buffer are removed in any case. If there are no further conditions, then this is equivalent to )+.alsa-seqALSA maintainers say, that destination address and queue are checked together, at least in the kernel buffer. However up to ALSA-1.0.22 the check for the queue is missing in libasound for the local buffer.alsa-seq$NoteOff events are kept in any case.Nonefalsa-seq6Simple subscription (w/o exclusive & time conversion).alsa-seq6Simple subscription (w/o exclusive & time conversion).alsa-seqSimple disconnection.alsa-seqSimple disconnection.alsa-seqTemporary subscription.alsa-seqTemporary subscription. LMNO LMNONoneHalsa-seqParse the given string into sequencer address. The client and port are separated by either colon or period, e.g. 128:1. The function also accepts client names or prefixes thereof. Throws  (Errno 2)% exception if no client name matches.alsa-seqSequencer handle.alsa-seqString to be parsed.alsa-seqThe parsed address.  None   E(c) Henning Thielemann, 2011 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone? alsa-seq2Wait until all events of the client are processed. alsa-seqGet an event from the input buffer. If the input buffer is empty, then it is filled with data from the sequencer queue. If there is no data in the sequencer queue, then the process is either put to sleep (if the sequencer is operating in blocking mode), or we throw EAGAIN6 (if the sequence is operating in non-blocking mode).We may also throw ENOSPCj, which means that the sequencer queue over-run and some events were lost (this clears the input buffer). alsa-seqReturns the number of events in the input buffer. If the input buffer is empty and the boolean argument is true, then try to fill the input buffer with data from the sequencer queue. See also:  . alsa-seqXOutput an event and drain the buffer, if it became full. Throws exceptions. See also: ,  , , ,  , , alsa-seq5Output an event without draining the buffer. Throws -EAGAIN' if the buffer becomes full. See also  .alsa-seqOutput an event directly to the sequencer, NOT through the output buffer. If an error occurs, then we throw an exception. See also  .alsa-seqIReturn the size (in bytes) of pending events on output buffer. See also  .alsa-seq2Extract the first event in output buffer. Throws  (Errno 2)0 exception if output buffer is empty. See also  .alsa-seqRRemove the first event in output buffer. Throws an exception on error. See also  .alsa-seqDrain output buffer to sequencer. This function drains all pending events on the output buffer. The function returns immediately after the events are sent to the queues regardless whether the events are processed or not. To get synchronization with the all event processes, use  H after calling this function. Throws an exception on error. See also:  ,  .alsa-seqhRemove events from both the user-space output buffer, and the kernel-space sequencer queue. See also: , , .alsa-seq<Remove events from the user-space output buffer. See also: .alsa-seqgRemove events from both the user-space input buffer, and the kernel-space sequencer queue. See also: , .alsa-seq;Remove events from the user-space input buffer. See also: .alsa-seq/Make a note whose unspecified fields contain 0.alsa-seqConstruct an ALSA sequencer event from very few information. Most fields are initialized with sensible defaults. You may use this as a start and alter its fields for your special needs. x(Event.simple myAddr (Event.simpleNote (Event.Channel 0) (Event.Pitch 60) Event.normalVelocity)) {Event.dest = destAddr} alsa-seqrefill if empty?alsa-seqnumber of events in buffer alsa-seq*the number of remaining events (or bytes?)alsa-seq!the byte size of remaining eventsalsa-seq%number of bytes sent to the sequenceralsa-seq!size of pending events (in bytes)alsa-seq2the first event in the buffer (if one was present)alsa-seq,byte size of events remaining in the buffer.PQRWXSTUVYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        PQRWXSTUVYlmnopqrstuvwxdefghijk]^_`abcZ[\yz{|}~NoneValsa-seqMWait for any of the given events, like poll, and return the one that is readyalsa-seqdWait for new input to be available from the sequencer (even if there is already input in the buffer) alsa-seqrWait until new output may be drained from the buffer to the sequencer (even if the output buffer is already empty)!alsa-seq>Wait until new input is available or new output may be drained"alsa-seqA thread-compatible version of  Sound.ALSA.Sequencer.Event.input. This call is always blocking (unless there are already event in the input buffer) but will not block other threads. The sequencer, however, must be set non-blocking or this will not work as expected.#alsa-seqA thread-compatible version of !Sound.ALSA.Sequencer.Event.output. This call is always blocking (unless there is space in the output buffer) but will not block other threads. The sequencer, however, must be set non-blocking or this will not work as expected.$alsa-seqA thread-compatible version of &Sound.ALSA.Sequencer.Event.drainBuffer. This call is always blocking but will not block other threads. The sequencer, however, must be set non-blocking or this will not work as expected. !"#$ !"#$,-./0011223456789:;<=>?@ABCDEFGHIJKLM,NOPQRSTUVWXYZ[\,N]^_`,abcde,fghijklmnopqrs,fghijtuvwxyz{o , f g h | } j ~ o b  , N !b!!!,!N!!!! , f g h i C j o","f"g"C""""""""k"""h""i",hkC #,#N#######b,fgkljopqrs,fgjo$,$f$g$h$i$C$$$$$$$$$$$$$$$$$$$$$$$$$$$$,hC %,%N%%&&&&&&&&&&b&&&&&&&&&&&&&&&&&& && & & & &&&&&&&&&&&&&&&&&&&&& &!&"&#&$&%&%&&&&'&(&)&*&+&,&-&.&/&0&1&2&&3&4&5&6&,&N&7&8&9&:&&&;&<&<&=&>&>&?&@&A&B&B&C&D&E&F&F&G&H&H&I&J&J&K&L&M&N&O&P&P&Q&R&R&S&T&T&U&V&V&WX@YZ[\ ] ^ _ `,abcdefghijklmnopqrstuvwxyz{|}~789:;+*@7fgNXN                                !!!  ""N"""""""""""""""""[""@""#   [$ $ $@$$N$$$$$$$$$$$$$$$$$$$$$ $!$"$#$$$$$$$$[$$&%&&&&&'&(&)&&*&+&,&-&.&/&0&@&1&2&3&4&5&6&7&8&9&:&;&<&=&>&?&@'A'B'C'D'E'F''G'H((g(((f(I(,(J(K(j((g(h(L(j(l(m((}(M(|(N(O(P(Q(R(S(T(U(V(W(XYZ[alsa-seq-0.6.0.8-inplaceSound.ALSA.SequencerSound.ALSA.Sequencer.PollSound.ALSA.Sequencer.QuerySound.ALSA.Sequencer.RealTimeSound.ALSA.Sequencer.TimeSound.ALSA.Sequencer.Queue Sound.ALSA.Sequencer.Queue.Timer Sound.ALSA.Sequencer.Queue.Tempo!Sound.ALSA.Sequencer.Queue.StatusSound.ALSA.Sequencer.PortSound.ALSA.Sequencer.ClientSound.ALSA.Sequencer.Queue.Info Sound.ALSA.Sequencer.Client.Info%Sound.ALSA.Sequencer.Client.InfoMonadSound.ALSA.Sequencer.Address$Sound.ALSA.Sequencer.Subscribe.QuerySound.ALSA.Sequencer.SubscribeSound.ALSA.Sequencer.Port.Info#Sound.ALSA.Sequencer.Port.InfoMonadSound.ALSA.Sequencer.ConnectSound.ALSA.Sequencer.Event&Sound.ALSA.Sequencer.Event.RemoveMonad#Sound.ALSA.Sequencer.Event.AccessorSound.ALSA.Sequencer.ConcurrentSound.ALSA.Sequencer.Area&Sound.ALSA.Sequencer.Marshal.SequencerSound.ALSA.Sequencer.SequencerSound.ALSA.Sequencer.Utility%Sound.ALSA.Sequencer.Marshal.RealTime!Sound.ALSA.Sequencer.Marshal.Time"Sound.ALSA.Sequencer.Marshal.Queue!Sound.ALSA.Sequencer.Marshal.Port#Sound.ALSA.Sequencer.Marshal.Client'Sound.ALSA.Sequencer.Marshal.ClientInfo$Sound.ALSA.Sequencer.Marshal.Address%Sound.ALSA.Sequencer.Marshal.PortInfo$Sound.ALSA.Sequencer.Marshal.Connect"Sound.ALSA.Sequencer.Marshal.Event,Sound.ALSA.Sequencer.Client.Info.EventFilter!Sound.ALSA.Sequencer.Event.RemoveEventdropInputBufferdropOutputBufferT BlockModeBlockNonblock DuplexMode InputMode OutputMode AllowOutput AllowInputOpenMode descriptorsCinitnextfirstloop_loopopen openDefaultclosewith withDefault defaultNamegetName setBlockinggetOutputBufferSizesetOutputBufferSizegetInputBufferSizesetInputBufferSize setPoolOutputsetPoolOutputRoomresetPoolOutput setPoolInputresetPoolInputConssecsnano fromInteger fromDoublefromFractional toIntegertoDouble toFractionalStampTickRealModeAbsoluteRelativemodestampconsAbsconsReldirectTypeAlsa MidiClockMidiTickcopyclonegetsetgetQueuegetTypesetType getResolution setResolution$fCT $fShowType$fEqType $fOrdType $fEnumTypegetTemposetTempogetPPQsetPPQgetSkewsetSkew getSkewBase setSkewBase getTickTime getRealTime getEventsCap systemTimersystemAnnounceunknowncapReadcapWrite capSyncRead capSyncWrite capDuplex capSubsRead capSubsWrite capNoExportcaps typeSpecifictypeMidiGeneric typeMidiGM typeMidiGS typeMidiXG typeMidiMT32 typeMidiGM2 typeSynthtypeDirectSample typeSample typeHardware typeSoftwaretypeSynthesizertypePorttypeApplicationtypesUserKernelsystem subscribers broadcastsetName getLocked setLockedgetOwnersetOwnergetFlagssetFlagsgetBroadcastFiltersetBroadcastFiltergetErrorBouncesetErrorBounce getClient setClient getNumPorts getEventLostgetAny queryNextrunmodify $fFunctorT$fApplicativeT$fMonadTgetIdclientportReadWritemallocgetPortsetPortgetIndexsetIndex getNumSubs getExclusive getTimeUpdate getTimeRealgetRootgetAddrqueryqueryAllsetQueue setExclusive setTimeUpdate setTimeReal getSendergetDest setSendersetDest subscribePortunsubscribePortcreate subscribe unsubscribegetPortSpecifiedsetPortSpecifiedgetTimestampingsetTimestampinggetTimestampRealsetTimestampReal getCapability setCapabilitygetMidiChannelssetMidiChannels getMidiVoices setMidiVoicesgetSynthVoicessetSynthVoicesgetTimestampQueuesetTimestampQueuesetAddr getReadUse getWriteUse queryFirst queryLoop_ queryLoop createSimple deleteSimple withSimpledeletesourcedestDataNoteEvCtrlEvQueueEvAddrEvConnEvEmptyEvCustomEvExtEvPortSubscribedPortUnsubscribed ClientStart ClientExit ClientChange PortStartPortExit PortChangeSysExBounceUserVar0UserVar1UserVar2UserVar3UserVar4EchoOSSUser0User1User2User3User4User5User6User7User8User9 TuneRequestResetSensingNoneUnknown QueueStart QueueContinue QueueStopQueueSetPosTickQueueSetPosTime QueueTempo QueueClock QueueTick QueueSkew QueueSyncPosTempounTempo Controller PgmChange ChanPress PitchBend Control14 NonRegParamRegParamSongPosSongSelQFrameTimeSignKeySignANoteNoteOnNoteOffKeyPress highPrioritytagqueuetimebodyTagunTagCustomcustom0custom1custom2Ctrl ctrlChannel ctrlParam ctrlValueValueunValue Parameter unParameterNote noteChannelnoteNote noteVelocitynoteOffVelocity noteDurationDuration unDurationVelocity unVelocityPitchunPitchChannel unChannelalloc allocNamed withNamedfreecontrol filterClear filterAdd filterDel filterCheckgetInputsetInputputInput getOutput setOutput putOutput getChannel setChannel putChannel setEventType putEventTypegetTagsetTagputTagputDest getIgnoreOff setIgnoreOff putIgnoreOffgetTimesetTimeputTimereverse toSubscribersfromSubscribers createFromcreateTo deleteFromdeleteTowithFromwithToparse timeStampconnectsyncOutputQueueinput inputPendingoutput outputBuffer outputDirect outputPending extractOutput removeOutput drainOutput dropOutput dropInput simpleNotenormalVelocity offVelocitysimple forSourcePort forConnection customZerothreadWaitInputthreadWaitOutputthreadWaitDuplexbaseGHC.PtrPtrFunPtrGHC.ForeignPtr ForeignPtrForeign.C.String withCAString peekCStringCStringForeign.Marshal.UtilsForeign.Marshal.AllocallocaForeign.ForeignPtr.ImpwithForeignPtr newForeignPtrForeign.StorablepeekCore expOpenMode expBlockModesnd_seq_reset_pool_inputsnd_seq_set_client_pool_inputsnd_seq_reset_pool_output#snd_seq_set_client_pool_output_roomsnd_seq_set_client_pool_outputsnd_seq_set_input_buffer_sizesnd_seq_get_input_buffer_sizesnd_seq_set_output_buffer_sizesnd_seq_get_output_buffer_sizesnd_seq_nonblock snd_seq_name snd_seq_close snd_seq_open withOpenMode showsField showsRecordcheckResultQuery FlagContainerFlagmodeAccstampAcc stampTick stampRealmodeAbsmodeRelpoke peekStamp pokeStampPosition unPositionSkewskewBase skewValueimpexpgetResolution_ TypeOther TypeSpecificTypeMIDIGeneric TypeMIDIGM TypeMIDIGS TypeMIDIXG TypeMIDIMT32 TypeMIDIGM2 TypeSynthTypeDirectSample TypeSample TypeHardware TypeSoftwareTypeSynthesizerTypePortTypeApplicationCapOtherCapReadCapWrite CapSyncRead CapSyncWrite CapDuplex CapSubsRead CapSubsWrite CapNoExport$fEnumCapabilityFlagGHC.EnumEnumTypeFlagCapabilityFlag capFlagSet typeFlagSetimpType getQueue_ getEventLost_T_ queryNext_set_getAny_get_ getNumPorts_getType_ setClient_ getClient_setErrorBounce_getErrorBounce_setBroadcastFilter_getBroadcastFilter_setName_getName_copy_malloc_ queryInit queryPort_getTimeUpdate_ getExclusive_setRoot queryPort setTimeReal_ getWriteUse_getTimestampQueue_ghc-prim GHC.TypesTrue getReadUse_setAddr_getAddr_setTimestampQueue_setSynthVoices_getSynthVoices_setMidiVoices_getMidiVoices_setMidiChannels_getMidiChannels_setCapability_getCapability_setPort_getPort_setTimestampReal_getTimestampReal_setTimestamping_getTimestamping_setPortSpecified_getPortSpecified_expEvETypeunEType FlagValueFlagseventLengthFixedeventLengthVariableeventLengthVarUser priorityHighpriorityNormal pokeQueue withMaybepokeBodypokeData pokeHeaderpeekData expQueueEv maxEventTypepeekBody peekNoteEv peekCtrlEv peekQueueEv peekQueueExt peekAddrEv peekConnEv peekEmptyEv peekCustomEv peekExtEvcheck_del_add_clear_clearaddcheck unpackEType Condition getCondition setCondition getEventType setRealTime setTickTime condInput condOutputcondDestcondDestChannelcondTimeBefore condTimeAfter condTimeTick condEventType condIgnoreOff condTagMatch_applythreadWaitPolls