xref: /linux/Documentation/sound/designs/seq-oss.rst (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
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