107aecc06STakashi Iwai=============================== 207aecc06STakashi IwaiOSS Sequencer Emulation on ALSA 307aecc06STakashi Iwai=============================== 407aecc06STakashi Iwai 507aecc06STakashi IwaiCopyright (c) 1998,1999 by Takashi Iwai 607aecc06STakashi Iwai 707aecc06STakashi Iwaiver.0.1.8; Nov. 16, 1999 807aecc06STakashi Iwai 907aecc06STakashi IwaiDescription 1007aecc06STakashi Iwai=========== 1107aecc06STakashi Iwai 1207aecc06STakashi IwaiThis directory contains the OSS sequencer emulation driver on ALSA. Note 1307aecc06STakashi Iwaithat this program is still in the development state. 1407aecc06STakashi Iwai 1507aecc06STakashi IwaiWhat this does - it provides the emulation of the OSS sequencer, access 1607aecc06STakashi Iwaivia ``/dev/sequencer`` and ``/dev/music`` devices. 1707aecc06STakashi IwaiThe most of applications using OSS can run if the appropriate ALSA 1807aecc06STakashi Iwaisequencer is prepared. 1907aecc06STakashi Iwai 2007aecc06STakashi IwaiThe following features are emulated by this driver: 2107aecc06STakashi Iwai 2207aecc06STakashi Iwai* Normal sequencer and MIDI events: 2307aecc06STakashi Iwai 2407aecc06STakashi Iwai They are converted to the ALSA sequencer events, and sent to the 2507aecc06STakashi Iwai corresponding port. 2607aecc06STakashi Iwai 2707aecc06STakashi Iwai* Timer events: 2807aecc06STakashi Iwai 2907aecc06STakashi Iwai The timer is not selectable by ioctl. The control rate is fixed to 3007aecc06STakashi Iwai 100 regardless of HZ. That is, even on Alpha system, a tick is always 3107aecc06STakashi Iwai 1/100 second. The base rate and tempo can be changed in ``/dev/music``. 3207aecc06STakashi Iwai 3307aecc06STakashi Iwai* Patch loading: 3407aecc06STakashi Iwai 3507aecc06STakashi Iwai It purely depends on the synth drivers whether it's supported since 3607aecc06STakashi Iwai the patch loading is realized by callback to the synth driver. 3707aecc06STakashi Iwai 3807aecc06STakashi Iwai* I/O controls: 3907aecc06STakashi Iwai 4007aecc06STakashi Iwai Most of controls are accepted. Some controls 4107aecc06STakashi Iwai are dependent on the synth driver, as well as even on original OSS. 4207aecc06STakashi Iwai 4307aecc06STakashi IwaiFurthermore, you can find the following advanced features: 4407aecc06STakashi Iwai 4507aecc06STakashi Iwai* Better queue mechanism: 4607aecc06STakashi Iwai 4707aecc06STakashi Iwai The events are queued before processing them. 4807aecc06STakashi Iwai 4907aecc06STakashi Iwai* Multiple applications: 5007aecc06STakashi Iwai 5107aecc06STakashi Iwai You can run two or more applications simultaneously (even for OSS 5207aecc06STakashi Iwai sequencer)! 5307aecc06STakashi Iwai However, each MIDI device is exclusive - that is, if a MIDI device 5407aecc06STakashi Iwai is opened once by some application, other applications can't use 5507aecc06STakashi Iwai it. No such a restriction in synth devices. 5607aecc06STakashi Iwai 5707aecc06STakashi Iwai* Real-time event processing: 5807aecc06STakashi Iwai 5907aecc06STakashi Iwai The events can be processed in real time without using out of bound 6007aecc06STakashi Iwai ioctl. To switch to real-time mode, send ABSTIME 0 event. The followed 6107aecc06STakashi Iwai events will be processed in real-time without queued. To switch off the 6207aecc06STakashi Iwai real-time mode, send RELTIME 0 event. 6307aecc06STakashi Iwai 6407aecc06STakashi Iwai* ``/proc`` interface: 6507aecc06STakashi Iwai 6607aecc06STakashi Iwai The status of applications and devices can be shown via 6707aecc06STakashi Iwai ``/proc/asound/seq/oss`` at any time. In the later version, 6807aecc06STakashi Iwai configuration will be changed via ``/proc`` interface, too. 6907aecc06STakashi Iwai 7007aecc06STakashi Iwai 7107aecc06STakashi IwaiInstallation 7207aecc06STakashi Iwai============ 7307aecc06STakashi Iwai 7407aecc06STakashi IwaiRun configure script with both sequencer support (``--with-sequencer=yes``) 7507aecc06STakashi Iwaiand OSS emulation (``--with-oss=yes``) options. A module ``snd-seq-oss.o`` 7607aecc06STakashi Iwaiwill be created. If the synth module of your sound card supports for OSS 7707aecc06STakashi Iwaiemulation (so far, only Emu8000 driver), this module will be loaded 7807aecc06STakashi Iwaiautomatically. 7907aecc06STakashi IwaiOtherwise, you need to load this module manually. 8007aecc06STakashi Iwai 8107aecc06STakashi IwaiAt beginning, this module probes all the MIDI ports which have been 8207aecc06STakashi Iwaialready connected to the sequencer. Once after that, the creation and deletion 8307aecc06STakashi Iwaiof ports are watched by announcement mechanism of ALSA sequencer. 8407aecc06STakashi Iwai 8507aecc06STakashi IwaiThe available synth and MIDI devices can be found in proc interface. 8607aecc06STakashi IwaiRun ``cat /proc/asound/seq/oss``, and check the devices. For example, 8707aecc06STakashi Iwaiif you use an AWE64 card, you'll see like the following: 8807aecc06STakashi Iwai:: 8907aecc06STakashi Iwai 9007aecc06STakashi Iwai OSS sequencer emulation version 0.1.8 9107aecc06STakashi Iwai ALSA client number 63 9207aecc06STakashi Iwai ALSA receiver port 0 9307aecc06STakashi Iwai 9407aecc06STakashi Iwai Number of applications: 0 9507aecc06STakashi Iwai 9607aecc06STakashi Iwai Number of synth devices: 1 9707aecc06STakashi Iwai synth 0: [EMU8000] 9807aecc06STakashi Iwai type 0x1 : subtype 0x20 : voices 32 99*ba35c3a5SRandy Dunlap capabilities : ioctl enabled / load_patch enabled 10007aecc06STakashi Iwai 10107aecc06STakashi Iwai Number of MIDI devices: 3 10207aecc06STakashi Iwai midi 0: [Emu8000 Port-0] ALSA port 65:0 10307aecc06STakashi Iwai capability write / opened none 10407aecc06STakashi Iwai 10507aecc06STakashi Iwai midi 1: [Emu8000 Port-1] ALSA port 65:1 10607aecc06STakashi Iwai capability write / opened none 10707aecc06STakashi Iwai 10807aecc06STakashi Iwai midi 2: [0: MPU-401 (UART)] ALSA port 64:0 10907aecc06STakashi Iwai capability read/write / opened none 11007aecc06STakashi Iwai 11107aecc06STakashi IwaiNote that the device number may be different from the information of 11207aecc06STakashi Iwai``/proc/asound/oss-devices`` or ones of the original OSS driver. 11307aecc06STakashi IwaiUse the device number listed in ``/proc/asound/seq/oss`` 11407aecc06STakashi Iwaito play via OSS sequencer emulation. 11507aecc06STakashi Iwai 11607aecc06STakashi IwaiUsing Synthesizer Devices 11707aecc06STakashi Iwai========================= 11807aecc06STakashi Iwai 11907aecc06STakashi IwaiRun your favorite program. I've tested playmidi-2.4, awemidi-0.4.3, gmod-3.1 12007aecc06STakashi Iwaiand xmp-1.1.5. You can load samples via ``/dev/sequencer`` like sfxload, 12107aecc06STakashi Iwaitoo. 12207aecc06STakashi Iwai 12307aecc06STakashi IwaiIf the lowlevel driver supports multiple access to synth devices (like 12407aecc06STakashi IwaiEmu8000 driver), two or more applications are allowed to run at the same 12507aecc06STakashi Iwaitime. 12607aecc06STakashi Iwai 12707aecc06STakashi IwaiUsing MIDI Devices 12807aecc06STakashi Iwai================== 12907aecc06STakashi Iwai 13007aecc06STakashi IwaiSo far, only MIDI output was tested. MIDI input was not checked at all, 13107aecc06STakashi Iwaibut hopefully it will work. Use the device number listed in 13207aecc06STakashi Iwai``/proc/asound/seq/oss``. 13307aecc06STakashi IwaiBe aware that these numbers are mostly different from the list in 13407aecc06STakashi Iwai``/proc/asound/oss-devices``. 13507aecc06STakashi Iwai 13607aecc06STakashi IwaiModule Options 13707aecc06STakashi Iwai============== 13807aecc06STakashi Iwai 13907aecc06STakashi IwaiThe following module options are available: 14007aecc06STakashi Iwai 14107aecc06STakashi Iwaimaxqlen 14207aecc06STakashi Iwai specifies the maximum read/write queue length. This queue is private 14307aecc06STakashi Iwai for OSS sequencer, so that it is independent from the queue length of ALSA 14407aecc06STakashi Iwai sequencer. Default value is 1024. 14507aecc06STakashi Iwai 14607aecc06STakashi Iwaiseq_oss_debug 14707aecc06STakashi Iwai specifies the debug level and accepts zero (= no debug message) or 14807aecc06STakashi Iwai positive integer. Default value is 0. 14907aecc06STakashi Iwai 15007aecc06STakashi IwaiQueue Mechanism 15107aecc06STakashi Iwai=============== 15207aecc06STakashi Iwai 15307aecc06STakashi IwaiOSS sequencer emulation uses an ALSA priority queue. The 15407aecc06STakashi Iwaievents from ``/dev/sequencer`` are processed and put onto the queue 15507aecc06STakashi Iwaispecified by module option. 15607aecc06STakashi Iwai 15707aecc06STakashi IwaiAll the events from ``/dev/sequencer`` are parsed at beginning. 15807aecc06STakashi IwaiThe timing events are also parsed at this moment, so that the events may 15907aecc06STakashi Iwaibe processed in real-time. Sending an event ABSTIME 0 switches the operation 16007aecc06STakashi Iwaimode to real-time mode, and sending an event RELTIME 0 switches it off. 16107aecc06STakashi IwaiIn the real-time mode, all events are dispatched immediately. 16207aecc06STakashi Iwai 16307aecc06STakashi IwaiThe queued events are dispatched to the corresponding ALSA sequencer 16407aecc06STakashi Iwaiports after scheduled time by ALSA sequencer dispatcher. 16507aecc06STakashi Iwai 16607aecc06STakashi IwaiIf the write-queue is full, the application sleeps until a certain amount 16707aecc06STakashi Iwai(as default one half) becomes empty in blocking mode. The synchronization 16807aecc06STakashi Iwaito write timing was implemented, too. 16907aecc06STakashi Iwai 17007aecc06STakashi IwaiThe input from MIDI devices or echo-back events are stored on read FIFO 17107aecc06STakashi Iwaiqueue. If application reads ``/dev/sequencer`` in blocking mode, the 17207aecc06STakashi Iwaiprocess will be awaked. 17307aecc06STakashi Iwai 17407aecc06STakashi IwaiInterface to Synthesizer Device 17507aecc06STakashi Iwai=============================== 17607aecc06STakashi Iwai 17707aecc06STakashi IwaiRegistration 17807aecc06STakashi Iwai------------ 17907aecc06STakashi Iwai 18007aecc06STakashi IwaiTo register an OSS synthesizer device, use snd_seq_oss_synth_register() 18107aecc06STakashi Iwaifunction: 18207aecc06STakashi Iwai:: 18307aecc06STakashi Iwai 18407aecc06STakashi Iwai int snd_seq_oss_synth_register(char *name, int type, int subtype, int nvoices, 18507aecc06STakashi Iwai snd_seq_oss_callback_t *oper, void *private_data) 18607aecc06STakashi Iwai 18707aecc06STakashi IwaiThe arguments ``name``, ``type``, ``subtype`` and ``nvoices`` 18807aecc06STakashi Iwaiare used for making the appropriate synth_info structure for ioctl. The 18907aecc06STakashi Iwaireturn value is an index number of this device. This index must be remembered 19007aecc06STakashi Iwaifor unregister. If registration is failed, -errno will be returned. 19107aecc06STakashi Iwai 19207aecc06STakashi IwaiTo release this device, call snd_seq_oss_synth_unregister() function: 19307aecc06STakashi Iwai:: 19407aecc06STakashi Iwai 19507aecc06STakashi Iwai int snd_seq_oss_synth_unregister(int index) 19607aecc06STakashi Iwai 19707aecc06STakashi Iwaiwhere the ``index`` is the index number returned by register function. 19807aecc06STakashi Iwai 19907aecc06STakashi IwaiCallbacks 20007aecc06STakashi Iwai--------- 20107aecc06STakashi Iwai 20207aecc06STakashi IwaiOSS synthesizer devices have capability for sample downloading and ioctls 20307aecc06STakashi Iwailike sample reset. In OSS emulation, these special features are realized 20407aecc06STakashi Iwaiby using callbacks. The registration argument oper is used to specify these 20507aecc06STakashi Iwaicallbacks. The following callback functions must be defined: 20607aecc06STakashi Iwai:: 20707aecc06STakashi Iwai 20807aecc06STakashi Iwai snd_seq_oss_callback_t: 20907aecc06STakashi Iwai int (*open)(snd_seq_oss_arg_t *p, void *closure); 21007aecc06STakashi Iwai int (*close)(snd_seq_oss_arg_t *p); 21107aecc06STakashi Iwai int (*ioctl)(snd_seq_oss_arg_t *p, unsigned int cmd, unsigned long arg); 21207aecc06STakashi Iwai int (*load_patch)(snd_seq_oss_arg_t *p, int format, const char *buf, int offs, int count); 21307aecc06STakashi Iwai int (*reset)(snd_seq_oss_arg_t *p); 21407aecc06STakashi Iwai 21507aecc06STakashi IwaiExcept for ``open`` and ``close`` callbacks, they are allowed to be NULL. 21607aecc06STakashi Iwai 21707aecc06STakashi IwaiEach callback function takes the argument type ``snd_seq_oss_arg_t`` as the 21807aecc06STakashi Iwaifirst argument. 21907aecc06STakashi Iwai:: 22007aecc06STakashi Iwai 22107aecc06STakashi Iwai struct snd_seq_oss_arg_t { 22207aecc06STakashi Iwai int app_index; 22307aecc06STakashi Iwai int file_mode; 22407aecc06STakashi Iwai int seq_mode; 22507aecc06STakashi Iwai snd_seq_addr_t addr; 22607aecc06STakashi Iwai void *private_data; 22707aecc06STakashi Iwai int event_passing; 22807aecc06STakashi Iwai }; 22907aecc06STakashi Iwai 23007aecc06STakashi IwaiThe first three fields, ``app_index``, ``file_mode`` and ``seq_mode`` 23107aecc06STakashi Iwaiare initialized by OSS sequencer. The ``app_index`` is the application 23207aecc06STakashi Iwaiindex which is unique to each application opening OSS sequencer. The 23307aecc06STakashi Iwai``file_mode`` is bit-flags indicating the file operation mode. See 23407aecc06STakashi Iwai``seq_oss.h`` for its meaning. The ``seq_mode`` is sequencer operation 23507aecc06STakashi Iwaimode. In the current version, only ``SND_OSSSEQ_MODE_SYNTH`` is used. 23607aecc06STakashi Iwai 23707aecc06STakashi IwaiThe next two fields, ``addr`` and ``private_data``, must be 23807aecc06STakashi Iwaifilled by the synth driver at open callback. The ``addr`` contains 23907aecc06STakashi Iwaithe address of ALSA sequencer port which is assigned to this device. If 24007aecc06STakashi Iwaithe driver allocates memory for ``private_data``, it must be released 24107aecc06STakashi Iwaiin close callback by itself. 24207aecc06STakashi Iwai 24307aecc06STakashi IwaiThe last field, ``event_passing``, indicates how to translate note-on 24407aecc06STakashi Iwai/ off events. In ``PROCESS_EVENTS`` mode, the note 255 is regarded 24507aecc06STakashi Iwaias velocity change, and key pressure event is passed to the port. In 24607aecc06STakashi Iwai``PASS_EVENTS`` mode, all note on/off events are passed to the port 24707aecc06STakashi Iwaiwithout modified. ``PROCESS_KEYPRESS`` mode checks the note above 128 24807aecc06STakashi Iwaiand regards it as key pressure event (mainly for Emu8000 driver). 24907aecc06STakashi Iwai 25007aecc06STakashi IwaiOpen Callback 25107aecc06STakashi Iwai------------- 25207aecc06STakashi Iwai 25307aecc06STakashi IwaiThe ``open`` is called at each time this device is opened by an application 25407aecc06STakashi Iwaiusing OSS sequencer. This must not be NULL. Typically, the open callback 25507aecc06STakashi Iwaidoes the following procedure: 25607aecc06STakashi Iwai 25707aecc06STakashi Iwai#. Allocate private data record. 25807aecc06STakashi Iwai#. Create an ALSA sequencer port. 25907aecc06STakashi Iwai#. Set the new port address on ``arg->addr``. 26007aecc06STakashi Iwai#. Set the private data record pointer on ``arg->private_data``. 26107aecc06STakashi Iwai 26207aecc06STakashi IwaiNote that the type bit-flags in port_info of this synth port must NOT contain 26307aecc06STakashi Iwai``TYPE_MIDI_GENERIC`` 26407aecc06STakashi Iwaibit. Instead, ``TYPE_SPECIFIC`` should be used. Also, ``CAP_SUBSCRIPTION`` 26507aecc06STakashi Iwaibit should NOT be included, too. This is necessary to tell it from other 26607aecc06STakashi Iwainormal MIDI devices. If the open procedure succeeded, return zero. Otherwise, 26707aecc06STakashi Iwaireturn -errno. 26807aecc06STakashi Iwai 26907aecc06STakashi IwaiIoctl Callback 27007aecc06STakashi Iwai-------------- 27107aecc06STakashi Iwai 27207aecc06STakashi IwaiThe ``ioctl`` callback is called when the sequencer receives device-specific 27307aecc06STakashi Iwaiioctls. The following two ioctls should be processed by this callback: 27407aecc06STakashi Iwai 27507aecc06STakashi IwaiIOCTL_SEQ_RESET_SAMPLES 27607aecc06STakashi Iwai reset all samples on memory -- return 0 27707aecc06STakashi Iwai 27807aecc06STakashi IwaiIOCTL_SYNTH_MEMAVL 27907aecc06STakashi Iwai return the available memory size 28007aecc06STakashi Iwai 28107aecc06STakashi IwaiFM_4OP_ENABLE 28207aecc06STakashi Iwai can be ignored usually 28307aecc06STakashi Iwai 28407aecc06STakashi IwaiThe other ioctls are processed inside the sequencer without passing to 28507aecc06STakashi Iwaithe lowlevel driver. 28607aecc06STakashi Iwai 28707aecc06STakashi IwaiLoad_Patch Callback 28807aecc06STakashi Iwai------------------- 28907aecc06STakashi Iwai 29007aecc06STakashi IwaiThe ``load_patch`` callback is used for sample-downloading. This callback 29107aecc06STakashi Iwaimust read the data on user-space and transfer to each device. Return 0 29207aecc06STakashi Iwaiif succeeded, and -errno if failed. The format argument is the patch key 29307aecc06STakashi Iwaiin patch_info record. The buf is user-space pointer where patch_info record 29407aecc06STakashi Iwaiis stored. The offs can be ignored. The count is total data size of this 29507aecc06STakashi Iwaisample data. 29607aecc06STakashi Iwai 29707aecc06STakashi IwaiClose Callback 29807aecc06STakashi Iwai-------------- 29907aecc06STakashi Iwai 30007aecc06STakashi IwaiThe ``close`` callback is called when this device is closed by the 30107aecc06STakashi Iwaiapplication. If any private data was allocated in open callback, it must 30207aecc06STakashi Iwaibe released in the close callback. The deletion of ALSA port should be 30307aecc06STakashi Iwaidone here, too. This callback must not be NULL. 30407aecc06STakashi Iwai 30507aecc06STakashi IwaiReset Callback 30607aecc06STakashi Iwai-------------- 30707aecc06STakashi Iwai 30807aecc06STakashi IwaiThe ``reset`` callback is called when sequencer device is reset or 30907aecc06STakashi Iwaiclosed by applications. The callback should turn off the sounds on the 31007aecc06STakashi Iwairelevant port immediately, and initialize the status of the port. If this 31107aecc06STakashi Iwaicallback is undefined, OSS seq sends a ``HEARTBEAT`` event to the 31207aecc06STakashi Iwaiport. 31307aecc06STakashi Iwai 31407aecc06STakashi IwaiEvents 31507aecc06STakashi Iwai====== 31607aecc06STakashi Iwai 31707aecc06STakashi IwaiMost of the events are processed by sequencer and translated to the adequate 31807aecc06STakashi IwaiALSA sequencer events, so that each synth device can receive by input_event 31907aecc06STakashi Iwaicallback of ALSA sequencer port. The following ALSA events should be 32007aecc06STakashi Iwaiimplemented by the driver: 32107aecc06STakashi Iwai 32207aecc06STakashi Iwai============= =================== 32307aecc06STakashi IwaiALSA event Original OSS events 32407aecc06STakashi Iwai============= =================== 32507aecc06STakashi IwaiNOTEON SEQ_NOTEON, MIDI_NOTEON 32607aecc06STakashi IwaiNOTE SEQ_NOTEOFF, MIDI_NOTEOFF 32707aecc06STakashi IwaiKEYPRESS MIDI_KEY_PRESSURE 32807aecc06STakashi IwaiCHANPRESS SEQ_AFTERTOUCH, MIDI_CHN_PRESSURE 32907aecc06STakashi IwaiPGMCHANGE SEQ_PGMCHANGE, MIDI_PGM_CHANGE 33007aecc06STakashi IwaiPITCHBEND SEQ_CONTROLLER(CTRL_PITCH_BENDER), 33107aecc06STakashi Iwai MIDI_PITCH_BEND 33207aecc06STakashi IwaiCONTROLLER MIDI_CTL_CHANGE, 33307aecc06STakashi Iwai SEQ_BALANCE (with CTL_PAN) 33407aecc06STakashi IwaiCONTROL14 SEQ_CONTROLLER 33507aecc06STakashi IwaiREGPARAM SEQ_CONTROLLER(CTRL_PITCH_BENDER_RANGE) 33607aecc06STakashi IwaiSYSEX SEQ_SYSEX 33707aecc06STakashi Iwai============= =================== 33807aecc06STakashi Iwai 33907aecc06STakashi IwaiThe most of these behavior can be realized by MIDI emulation driver 34007aecc06STakashi Iwaiincluded in the Emu8000 lowlevel driver. In the future release, this module 34107aecc06STakashi Iwaiwill be independent. 34207aecc06STakashi Iwai 34307aecc06STakashi IwaiSome OSS events (``SEQ_PRIVATE`` and ``SEQ_VOLUME`` events) are passed as event 34407aecc06STakashi Iwaitype SND_SEQ_OSS_PRIVATE. The OSS sequencer passes these event 8 byte 34507aecc06STakashi Iwaipackets without any modification. The lowlevel driver should process these 34607aecc06STakashi Iwaievents appropriately. 34707aecc06STakashi Iwai 34807aecc06STakashi IwaiInterface to MIDI Device 34907aecc06STakashi Iwai======================== 35007aecc06STakashi Iwai 35107aecc06STakashi IwaiSince the OSS emulation probes the creation and deletion of ALSA MIDI 35207aecc06STakashi Iwaisequencer ports automatically by receiving announcement from ALSA 35307aecc06STakashi Iwaisequencer, the MIDI devices don't need to be registered explicitly 35407aecc06STakashi Iwailike synth devices. 35507aecc06STakashi IwaiHowever, the MIDI port_info registered to ALSA sequencer must include 35607aecc06STakashi Iwaia group name ``SND_SEQ_GROUP_DEVICE`` and a capability-bit 35707aecc06STakashi Iwai``CAP_READ`` or ``CAP_WRITE``. Also, subscription capabilities, 35807aecc06STakashi Iwai``CAP_SUBS_READ`` or ``CAP_SUBS_WRITE``, must be defined, too. If 35907aecc06STakashi Iwaithese conditions are not satisfied, the port is not registered as OSS 36007aecc06STakashi Iwaisequencer MIDI device. 36107aecc06STakashi Iwai 36207aecc06STakashi IwaiThe events via MIDI devices are parsed in OSS sequencer and converted 36307aecc06STakashi Iwaito the corresponding ALSA sequencer events. The input from MIDI sequencer 36407aecc06STakashi Iwaiis also converted to MIDI byte events by OSS sequencer. This works just 36507aecc06STakashi Iwaia reverse way of seq_midi module. 36607aecc06STakashi Iwai 36707aecc06STakashi IwaiKnown Problems / TODO's 36807aecc06STakashi Iwai======================= 36907aecc06STakashi Iwai 37007aecc06STakashi Iwai* Patch loading via ALSA instrument layer is not implemented yet. 37107aecc06STakashi Iwai 372