[      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                            !"#$ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E FGHIJK L MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     (SafeSafeSafe!Convert number of nanoseconds to (Convert fractional number of seconds to  Time must be non-negative.!Convert number of nanoseconds to (Convert fractional number of seconds to     J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalSafe !"Safe#$ %&'()*+,-./0#$ %&'()*+,-./#$  %&'()*+,-./0Safe    E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneCThe type of queue identifiers.123456789:;< 123456789:123456789:;<E(c) Henning Thielemann, 2011 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneC Port types.Port capabilities.=<a type that cannot be represented by the other constructors >hardware specific ?generic MIDI device @General MIDI compatible device AGS compatible device BXG compatible device CMT-32 compatible device D!General MIDI 2 compatible device E Synth device F*Sampling device (support sample download) G7Sampling device (sample can be downloaded at any time) H&This port is implemented in hardware. I&This port is implemented in software. J1Messages sent to this port will generate sounds. KkThis port may connect to other devices (whose characteristics are not known). Lapplication (sequencer/editor) MBa capability that cannot be represented by the other constructors Nreadable from this port Owritable to this port Pallow read subscriptions Qallow write subscriptions Rallow read/write duplex Sallow read subscription Tallow write subscription Urouting not allowed VpThe Enum instance may not be very efficient, but it should hardly be used, at all. Better use constants such as  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 W| instance in this way, in order to stay independent from the particular ALSA definitions, that may differ between platforms.DX=>?@ABCDEFGHIJKLYMNOPQRSTUZ[\] !"#$%&'()*+,-./01234567^_`Va?X=>?@ABCDEFGHIJKLYMNOPQRSTUZ[\] !"#$%&'()*+,-./01234567*X=>?@ABCDEFGHIJKLY MNOPQRSTUZ[\] !"#$%&'()*+,-./01234567^_`VaE(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneC8The different types of clients.;The type of client identifiers. 89:;<=>?@bcde 89:;<=>?@bcd 89:;<=>?@bcde NoneF$The address of all subscribed ports. ABCDfEFGHIgh ABCDfEFGHI ABCDfEFGHIgh!NoneJKLMiJKLMJKLMi"J(c) Henning Thielemann, 2011-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneCNOPQRSTUVWjklmXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~nopqrstuvwxyz{|}~NOPQRSTUVWjklmXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~nopqrstuvwxyz{|}~?NOPQRSTUVWjklmXYZ[\]^_`abcdefghij klmnopqrstuvwxyz{|} ~ nopqrstuvwxyz{|}~#E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalSafeThe type of sequencer handles.*Blocking behavior of the sequencer device.Operations may block.%Throw exceptions instead of blocking.}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.$Safe{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.vClose 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?*This is the name that should be passed to  in most cases.ZGet identifier of a sequencer handle. It is the same identifier specified in the call to .cChange 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).*Return the byte size of the output buffer.JResize of the output buffer. This function clears all output events (see  drop_output).%Return the byte size of input buffer.EResize the input buffer. This function clears all input events (see  drop_input).Resize the output memory pool.|Specify how much space should become free before waking clients that are blocked due to a lack of space in the output pool.Reset the output pool.Resize the input memory pool.Reset the input pool.The 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 .Blocking behaviorHandle to the sequencer.Blocking behaviorHandle to the sequencer.handle to the sequencerThe 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 .Blocking behavior>Action on the sequencer, the result must be computed strictly.sequencer handleALSA identifier for the handlesequencer handle blocking modeSequencer handle.Size of output buffer in bytes.Sequencer handle.New buffer size in bytes.Sequencer handle.Size of input buffer in bytes.Sequencer handle.New byffer size in bytes.Sequencer handle.New size in bytes.Sequencer handle. Number of bytes need to wake up.Sequencer handle.Sequencer handle.New size in bytes.Sequencer handle.NoneParse 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.Sequencer handle.String to be parsed.The parsed address. ABCDEFGHI ABCDEFGHI Safe%J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone,Copy the content of one object into another.JCreate a new information area filled with data about the sequencer client.0Allocate an uninitialized object. (Not exported)8Copy the content of an object to a newly created object.ICreate a new information area filled with data about an arbitrary client.^Set the information for the sequencer client based on the data in the given information area.BGet information about the client with the next biggest identifier.+ DestinationSourceWas there a next client?)* NoneC                    E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneEGet the client identifier for the sequencer. A convinience function.?Set the name for the sequencer client. A convinience function. 89:;<=>?@ ;<@=>?89:&None    J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneNone6Simple subscription (w/o exclusive & time conversion).6Simple subscription (w/o exclusive & time conversion). Simple disconnection.!Simple disconnection."Temporary subscription.#Temporary subscription.  !"# JKLM !"# JKLM "!#  !"#'J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone VCreate a new information area filled with data about an given port on a given client.(Get the address of the information area.SCreate a new information area filled with data about a specific port on our client.0Allocate an uninitialized object. (Not exported)'[Set the information for the sequencer port based on the data in the given information area.-,Copy the content of one object into another.;8Copy the content of an object to a newly created object.>Set the port address.D3Get information about the first port on our client.EGet 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.J$% DestinationSource&'()*+,-./0123456789:;<=>?@ABCDEH$%&'()*+,-./0123456789:;<=>?@ABCDEI$%&'()*+,-./0123456789:;<=>?@ABCDEE(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneFCreate a port - simple version.GDelete the port.I6Create a new port, as described by the info structure.JDelete the port. FGHIJ% !"#$%&'()*+,-./01234567FGHIJ%IFJGH !"#$%&'()*+,-./01234567 FGHIJ J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneKL$$%&'()*+,-./0123456789:;<=>?@ABCDEKL$$'CDEKL(%&13?)579;+-/=AB24@*68<:,.0>KLJ(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneC!MNOP QRSTUVWXYZ[\]^_`abcdefghijMNOPQRSTUVWXYZ[\]^_`abcdefghijMNOPQRSTUVWXYZ[\]^_`abcdefghij MNOP QRSTUVWXYZ[\]^_`abcdefghijJ(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneoDelete the specified queue.pstartstopcontinue 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.    kQueue.T identifier.lmnoSequencer handle.Queue.T identifier.pSequencer handle.target Queue.T.8prototype event that may provide timestamp, source queueklmnopkmolnp    klmnopE(c) Henning Thielemann, 2011 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneq2Wait until all events of the client are processed.rGet 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).sReturns 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: r.tXOutput an event and drain the buffer, if it became full. Throws exceptions. See also: v, u , w, z, { , x, yu5Output an event without draining the buffer. Throws -EAGAIN' if the buffer becomes full. See also t.vOutput an event directly to the sequencer, NOT through the output buffer. If an error occurs, then we throw an exception. See also t.wIReturn the size (in bytes) of pending events on output buffer. See also t.x2Extract the first event in output buffer. Throws  (Errno 2)0 exception if output buffer is empty. See also t.yRRemove the first event in output buffer. Throws an exception on error. See also t.zDrain 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 qH after calling this function. Throws an exception on error. See also: t, q.{hRemove events from both the user-space output buffer, and the kernel-space sequencer queue. See also: z, |, y.|<Remove events from the user-space output buffer. See also: {.}gRemove events from both the user-space input buffer, and the kernel-space sequencer queue. See also: ~, y.~;Remove events from the user-space input buffer. See also: }./Make a note whose unspecified fields contain 0.Construct 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}#qrsrefill if empty?number of events in buffert*the number of remaining events (or bytes?)u!the byte size of remaining eventsv%number of bytes sent to the sequencerw!size of pending events (in bytes)x2the first event in the buffer (if one was present)yz,byte size of events remaining in the buffer.{|}~NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~qrstuvwxyz{|}~tuvwxyz{|qrs}~NOPQRSTUVWjklmnopqrstuvbcdefghi}~[\]^_`aXYZwxyz{|#qrstuvwxyz{|}~None    (NoneC 0Allocate an uninitialized object. (Not exported)!8Copy the content of an object to a newly created object."/Remove events according to the given conditions#,Copy the content of one object into another.:$%&'()*+,-./0123456789:;<=> ? DestinationSource!"@ABCDEFGHI#JKLMNOPQRSTUVWXY$' "@ABCDEFGHI#JKLMNOPQRSTUVWX8$%&'()*+,-./0123456789:;<=> ?!"@ABCDEFGHI#JKLMNOPQRSTUVWXYNoneCZ:apply the changes in the Remove monad to the Remove record/Remove events according to the given conditionsyAll events in the local input buffer are removed. The conditions are not checked for these events. This is equivalent to )*.Matching 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 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.$NoteOff events are kept in any case.)[\Z]^_`abcdefghi([\Z]^_`abcdefghiJ(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNonej,Copy the content of one object into another.k0Allocate an uninitialized object. (Not exported)8Copy the content of an object to a newly created object.!lmjnopqrstuvwxyz{k DestinationSource| lmjnopqrstuvwxyz{k|J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone,Copy the content of one object into another.8Copy the content of an object to a newly created object.0Allocate an uninitialized object. (Not exported)}~ DestinationSource}~J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone0Allocate an uninitialized object. (Not exported)8Copy the content of an object to a newly created object.,Copy the content of one object into another.! DestinationSource J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone,Copy the content of one object into another.0Allocate an uninitialized object. (Not exported)8Copy the content of an object to a newly created object. DestinationSourceSafeNoneMWait for any of the given events, like poll, and return the one that is readydWait for new input to be available from the sequencer (even if there is already input in the buffer)rWait until new output may be drained from the buffer to the sequencer (even if the output buffer is already empty)>Wait until new input is available or new output may be drainedA 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.A 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.A 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. ?(c) Henning Thielemann, 2012 (c) Dylan Simon, 2011BSD3 provisionalNone ,Copy the content of one object into another..Set destination address of a port subscription)Get sender address of a port subscription&Unsubscribe a connection between ports)Set sender address of a port subscription.Get destination address of a port subscription8Copy the content of an object to a newly created object.0Allocate an uninitialized object. (Not exported)Subscribe a port connectionSubscribe a port connection: subscribeSimple5 sender dest exclusive (Just (updatequeue, realtime))Unsubscribe a port connection: unsubscribeSimple sender dest* DestinationSource)?(c) Henning Thielemann, 2012 (c) Dylan Simon, 2011BSD3 provisionalNone 8Copy the content of an object to a newly created object.&Get the client/port address of a query,Copy the content of one object into another.0Allocate an uninitialized object. (Not exported) &Set the client/port address of a query&Get the address of subscriber of queryQuery port subscriber list JQueries a subscriber connected to (Write) or from (Read) a given address:   seq addr typ index 0Queries the list of subscribers accessing a port4 DestinationSource               1      E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalSafe,-./0123456789:;,-<=>?,@AB,-CDEFGHIJKLMNOPQRSTUVWXYZ[\]^A_`,-abcE , - d e E b c C D!,!-!f!g"h"i"j"k"l"m"n"o"p"A"m"q"r"l"s"t"u"v"w"x"p"y"z"{"|"}"~""o"""""""""""""n""""""k""""""""""""""j"""""""""""""i""""","-"""""f"g"""""""""""""""""""""""""""""""""""""""#,############$$$$$$$$$$$$$$$$$  %,%%%%%%%%%%%%%%%%% ,              ',''''''''''''''''''''''' '!'"'#'$'%'&'''''()*+,  ,$ "&'%!#-./0123456789:;<+=*>?@ABCDEfgF,GHIJKLMNOPQRSTUVWXYZ[\],^_`abcd,efdg,dhijklmnoApqr,dstuvwxy35;,zd{|}~UV+A,zsd|~$z7-   !""""""""""""""""""""""""""""""""""""""""""""##-## # # # # ###$$$$$$$$$$$$$$% %-%!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%0%0%1%%z%2%3%4 - 5 6&7&8&9&:&;&<&,&=&>?@AB'C'D''zEFG'-'!'"'$'H'I'J'K'L'M'N'O'P'Q'R'S'(')'T'U'V'W'X'Y'Z'['.'/'#'%'0'0'1'2'3'4\]^_`-56abcdefghijklmnopqrstuv(z(((U(w(x(x(,(-(!(y(z({(|(}(~((((((((((((0(0(1(((((d({(M(N((P(R(S(V(f((e((((((((((((3-56z-!./#%0013-!|z%001z3z-!#%0013z-!'#%0013`001-!}~3)-!J'TU(0013alsas_74hXgTBoNvXJWofmzc3UmiSound.ALSA.Sequencer.RealTimeSound.ALSA.Sequencer.TimeSound.ALSA.Sequencer.QueueSound.ALSA.Sequencer.PortSound.ALSA.Sequencer.ClientSound.ALSA.Sequencer.AddressSound.ALSA.Sequencer.ConnectSound.ALSA.Sequencer.EventSound.ALSA.SequencerSound.ALSA.Sequencer.Query Sound.ALSA.Sequencer.Client.Info%Sound.ALSA.Sequencer.Client.InfoMonadSound.ALSA.Sequencer.Port.Info#Sound.ALSA.Sequencer.Port.InfoMonad#Sound.ALSA.Sequencer.Event.Accessor&Sound.ALSA.Sequencer.Event.RemoveMonadSound.ALSA.Sequencer.Queue.Info!Sound.ALSA.Sequencer.Queue.Status Sound.ALSA.Sequencer.Queue.Tempo Sound.ALSA.Sequencer.Queue.TimerSound.ALSA.Sequencer.PollSound.ALSA.Sequencer.ConcurrentSound.ALSA.Sequencer.Subscribe$Sound.ALSA.Sequencer.Subscribe.QuerySound.ALSA.Sequencer.Utility%Sound.ALSA.Sequencer.Marshal.RealTimeSound.ALSA.Sequencer.Area!Sound.ALSA.Sequencer.Marshal.Time"Sound.ALSA.Sequencer.Marshal.Queue!Sound.ALSA.Sequencer.Marshal.Port#Sound.ALSA.Sequencer.Marshal.Client$Sound.ALSA.Sequencer.Marshal.Address$Sound.ALSA.Sequencer.Marshal.Connect"Sound.ALSA.Sequencer.Marshal.Event&Sound.ALSA.Sequencer.Marshal.SequencerSound.ALSA.Sequencer.Sequencer'Sound.ALSA.Sequencer.Marshal.ClientInfo,Sound.ALSA.Sequencer.Client.Info.EventFilter%Sound.ALSA.Sequencer.Marshal.PortInfo!Sound.ALSA.Sequencer.Event.RemoveEventdropInputBufferdropOutputBufferTConssecsnano fromInteger fromDoublefromFractional toIntegertoDouble toFractionalStampTickRealModeAbsoluteRelativemodestampconsAbsconsReldirectTypeCap systemTimersystemAnnounceunknowncapReadcapWrite capSyncRead capSyncWrite capDuplex capSubsRead capSubsWrite capNoExportcaps typeSpecifictypeMidiGeneric typeMidiGM typeMidiGS typeMidiXG typeMidiMT32 typeMidiGM2 typeSynthtypeDirectSample typeSample typeHardware typeSoftwaretypeSynthesizertypePorttypeApplicationtypesUserKernelsystem subscribers broadcastclientportsourcedestDataNoteEvCtrlEvQueueEvAddrEvConnEvEmptyEvCustomEvExtEvPortSubscribedPortUnsubscribed 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 unChannel BlockModeBlockNonblock DuplexMode InputMode OutputMode AllowOutput AllowInputOpenModeopen openDefaultclosewith withDefault defaultNamegetName setBlockinggetOutputBufferSizesetOutputBufferSizegetInputBufferSizesetInputBufferSize setPoolOutputsetPoolOutputRoomresetPoolOutput setPoolInputresetPoolInputparseCinitnextfirstloop_loopcopyclonesetNamegetBroadcastFiltersetBroadcastFiltergetErrorBouncesetErrorBounce getClient setClientgetType getNumPorts getEventLostgetgetAnyset queryNextrunmodifygetId queryFirst queryLoop_ queryLoop filterClear filterAdd filterDel filterCheckreverse toSubscribersfromSubscribers createFromcreateTo deleteFromdeleteTowithFromwithTogetPortSpecifiedsetPortSpecifiedgetTimestampingsetTimestampinggetTimestampRealsetTimestampRealgetPortsetPort getCapability setCapabilitygetMidiChannelssetMidiChannels getMidiVoices setMidiVoicesgetSynthVoicessetSynthVoicesgetTimestampQueuesetTimestampQueuegetAddrsetAddr getReadUse getWriteUse createSimple deleteSimple withSimplecreatedeletealloc allocNamed withNamedfreecontrolsyncOutputQueueinput inputPendingoutput outputBuffer outputDirect outputPending extractOutput removeOutput drainOutput dropOutput dropInput simpleNotenormalVelocity offVelocitysimple forSourcePort forConnection customZero timeStampconnectgetInputsetInputputInput getOutput setOutput putOutput getChannel setChannel putChannel setEventType putEventTypegetTagsetTagputTaggetDestsetDestputDest getIgnoreOff setIgnoreOff putIgnoreOffgetTimesetTimeputTime getLocked setLockedgetOwnersetOwnergetFlagssetFlagsgetQueue getTickTime getRealTime getEventsgetTemposetTempogetPPQsetPPQgetSkewsetSkew getSkewBase setSkewBaseAlsa MidiClockMidiTicksetType getResolution setResolution descriptorsthreadWaitInputthreadWaitOutputthreadWaitDuplexmallocsetQueue getExclusive setExclusive getTimeUpdate setTimeUpdate getTimeReal setTimeReal getSender setSender subscribePortunsubscribePort subscribe unsubscribeReadWritegetIndexsetIndex getNumSubsgetRootqueryqueryAll showsField showsRecordcheckResultQuery $fStorableT$fShowT nanoPerSecondbaseGHC.PtrPtrFunPtrGHC.ForeignPtr ForeignPtrForeign.C.String withCAString peekCStringCStringForeign.Marshal.UtilsForeign.Marshal.AllocallocaForeign.ForeignPtr.ImpwithForeignPtr newForeignPtrForeign.Storablepeek FlagContainerFlagmodeAccstampAcc stampTick stampRealmodeAbsmodeRelpoke peekStamp pokeStampPosition unPositionSkew skewValueskewBaseimpexp$fStorableSkew TypeOther TypeSpecificTypeMIDIGeneric TypeMIDIGM TypeMIDIGS TypeMIDIXG TypeMIDIMT32 TypeMIDIGM2 TypeSynthTypeDirectSample TypeSample TypeHardware TypeSoftwareTypeSynthesizerTypePortTypeApplicationCapOtherCapReadCapWrite CapSyncRead CapSyncWrite CapDuplex CapSubsRead CapSubsWrite CapNoExport$fEnumCapabilityFlagGHC.EnumEnumTypeFlagCapabilityFlag capFlagSet typeFlagSet $fIxTypeFlag$fEnumTypeFlag$fIxCapabilityFlagimpTypeexpEvETypeunEType FlagValueFlagseventLengthFixedeventLengthVariableeventLengthVarUser priorityHighpriorityNormal pokeQueue withMaybepokeBodypokeData pokeHeaderpeekData expQueueEv maxEventTypepeekBody peekNoteEv peekCtrlEv peekQueueEv peekQueueExt peekAddrEv peekConnEv peekEmptyEv peekCustomEv peekExtEv $fTypeConnEv $fTypeAddrEv $fTypeExtEv$fTypeCustomEv $fTypeEmptyEv $fTypeQueueEv $fTypeCtrlEv $fTypeNoteEv$fStorableCustom$fStorableCtrl$fStorableNote $fFlagFlagCore expOpenMode expBlockMode$fAllowInputDuplexMode$fAllowInputInputMode$fAllowOutputDuplexMode$fAllowOutputOutputMode$fOpenModeDuplexMode$fOpenModeInputMode$fOpenModeOutputModesnd_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 withOpenModesnd_seq_parse_address getEventLost_T_ queryNext_set_getAny_get_ getNumPorts_getType_ setClient_ getClient_setErrorBounce_getErrorBounce_setBroadcastFilter_getBroadcastFilter_setName_getName_copy_malloc_ queryInit$fCT$fCT0liftGetliftSetcheck_del_add_clear_clearaddcheck unpackETypesnd_seq_disconnect_tosnd_seq_disconnect_fromsnd_seq_connect_tosnd_seq_connect_from 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_snd_seq_delete_portsnd_seq_create_portsnd_seq_delete_simple_portsnd_seq_create_simple_port _dummyEnumSetcontrol_ eventOutput_free_ allocNamed_alloc_ controlCustom eventOutput controlPlainsnd_seq_drop_input_buffersnd_seq_drop_inputsnd_seq_drop_output_buffersnd_seq_drop_outputsnd_seq_drain_outputsnd_seq_extract_outputsnd_seq_event_output_pendingsnd_seq_event_output_directsnd_seq_event_output_buffersnd_seq_event_outputsnd_seq_event_input_pendingsnd_seq_event_inputsnd_seq_sync_output_queue checkResult Condition ConditionFlag setTickTime_ getTickTime_ setRealTime_ getRealTime_setDest_getDest_setTag_getTag_ setEventType_ getEventType_ setChannel_ getChannel_ setQueue_ getQueue_ setCondition_ getCondition_run_ getCondition setCondition getEventType setRealTime setTickTime condInput condOutputcondDestcondDestChannelcondTimeBefore condTimeAfter condTimeTick condEventType condIgnoreOff condTagMatch_applyunpack liftGetCond liftSetCond liftPutCondgetCondsetCondputCond modifyCond _getEventType _setEventType getDestQueue setDestQueue setFlags_ getFlags_ setOwner_ getOwner_ setLocked_ getLocked_ getEvents_ setSkewBase_ getSkewBase_setSkew_getSkew_setPPQ_getPPQ_ setTempo_ getTempo_getResolution_setResolution_setType_expTypesnd_seq_poll_descriptorssnd_seq_poll_descriptors_countthreadWaitPollsWaitFdWaitRead WaitWrite pollWaitsthreadWaitEvents catchFull catchIntr setTimeReal_getTimeUpdate_unsubscribePort_subscribePort_ setSender_ getSender_ getTimeReal_setTimeUpdate_ setExclusive_ getExclusive_ queryPort_setRoot queryPortsetRoot_getRoot_ getNumSubs_ setIndex_ getIndex_