xref: /openbmc/linux/Documentation/sound/designs/seq-oss.rst (revision 07aecc06eb32ff0010dff69438806b6f200fc1fd)
1*07aecc06STakashi Iwai===============================
2*07aecc06STakashi IwaiOSS Sequencer Emulation on ALSA
3*07aecc06STakashi Iwai===============================
4*07aecc06STakashi Iwai
5*07aecc06STakashi IwaiCopyright (c) 1998,1999 by Takashi Iwai
6*07aecc06STakashi Iwai
7*07aecc06STakashi Iwaiver.0.1.8; Nov. 16, 1999
8*07aecc06STakashi Iwai
9*07aecc06STakashi IwaiDescription
10*07aecc06STakashi Iwai===========
11*07aecc06STakashi Iwai
12*07aecc06STakashi IwaiThis directory contains the OSS sequencer emulation driver on ALSA. Note
13*07aecc06STakashi Iwaithat this program is still in the development state.
14*07aecc06STakashi Iwai
15*07aecc06STakashi IwaiWhat this does - it provides the emulation of the OSS sequencer, access
16*07aecc06STakashi Iwaivia ``/dev/sequencer`` and ``/dev/music`` devices.
17*07aecc06STakashi IwaiThe most of applications using OSS can run if the appropriate ALSA
18*07aecc06STakashi Iwaisequencer is prepared.
19*07aecc06STakashi Iwai
20*07aecc06STakashi IwaiThe following features are emulated by this driver:
21*07aecc06STakashi Iwai
22*07aecc06STakashi Iwai* Normal sequencer and MIDI events:
23*07aecc06STakashi Iwai
24*07aecc06STakashi Iwai    They are converted to the ALSA sequencer events, and sent to the
25*07aecc06STakashi Iwai    corresponding port.
26*07aecc06STakashi Iwai
27*07aecc06STakashi Iwai* Timer events:
28*07aecc06STakashi Iwai
29*07aecc06STakashi Iwai    The timer is not selectable by ioctl. The control rate is fixed to
30*07aecc06STakashi Iwai    100 regardless of HZ. That is, even on Alpha system, a tick is always
31*07aecc06STakashi Iwai    1/100 second. The base rate and tempo can be changed in ``/dev/music``.
32*07aecc06STakashi Iwai
33*07aecc06STakashi Iwai* Patch loading:
34*07aecc06STakashi Iwai
35*07aecc06STakashi Iwai    It purely depends on the synth drivers whether it's supported since
36*07aecc06STakashi Iwai    the patch loading is realized by callback to the synth driver.
37*07aecc06STakashi Iwai
38*07aecc06STakashi Iwai* I/O controls:
39*07aecc06STakashi Iwai
40*07aecc06STakashi Iwai    Most of controls are accepted. Some controls
41*07aecc06STakashi Iwai    are dependent on the synth driver, as well as even on original OSS.
42*07aecc06STakashi Iwai
43*07aecc06STakashi IwaiFurthermore, you can find the following advanced features:
44*07aecc06STakashi Iwai
45*07aecc06STakashi Iwai* Better queue mechanism:
46*07aecc06STakashi Iwai
47*07aecc06STakashi Iwai    The events are queued before processing them.
48*07aecc06STakashi Iwai
49*07aecc06STakashi Iwai* Multiple applications:
50*07aecc06STakashi Iwai
51*07aecc06STakashi Iwai    You can run two or more applications simultaneously (even for OSS
52*07aecc06STakashi Iwai    sequencer)!
53*07aecc06STakashi Iwai    However, each MIDI device is exclusive - that is, if a MIDI device
54*07aecc06STakashi Iwai    is opened once by some application, other applications can't use
55*07aecc06STakashi Iwai    it. No such a restriction in synth devices.
56*07aecc06STakashi Iwai
57*07aecc06STakashi Iwai* Real-time event processing:
58*07aecc06STakashi Iwai
59*07aecc06STakashi Iwai    The events can be processed in real time without using out of bound
60*07aecc06STakashi Iwai    ioctl. To switch to real-time mode, send ABSTIME 0 event. The followed
61*07aecc06STakashi Iwai    events will be processed in real-time without queued. To switch off the
62*07aecc06STakashi Iwai    real-time mode, send RELTIME 0 event.
63*07aecc06STakashi Iwai
64*07aecc06STakashi Iwai* ``/proc`` interface:
65*07aecc06STakashi Iwai
66*07aecc06STakashi Iwai    The status of applications and devices can be shown via
67*07aecc06STakashi Iwai    ``/proc/asound/seq/oss`` at any time. In the later version,
68*07aecc06STakashi Iwai    configuration will be changed via ``/proc`` interface, too.
69*07aecc06STakashi Iwai
70*07aecc06STakashi Iwai
71*07aecc06STakashi IwaiInstallation
72*07aecc06STakashi Iwai============
73*07aecc06STakashi Iwai
74*07aecc06STakashi IwaiRun configure script with both sequencer support (``--with-sequencer=yes``)
75*07aecc06STakashi Iwaiand OSS emulation (``--with-oss=yes``) options. A module ``snd-seq-oss.o``
76*07aecc06STakashi Iwaiwill be created. If the synth module of your sound card supports for OSS
77*07aecc06STakashi Iwaiemulation (so far, only Emu8000 driver), this module will be loaded
78*07aecc06STakashi Iwaiautomatically.
79*07aecc06STakashi IwaiOtherwise, you need to load this module manually.
80*07aecc06STakashi Iwai
81*07aecc06STakashi IwaiAt beginning, this module probes all the MIDI ports which have been
82*07aecc06STakashi Iwaialready connected to the sequencer. Once after that, the creation and deletion
83*07aecc06STakashi Iwaiof ports are watched by announcement mechanism of ALSA sequencer.
84*07aecc06STakashi Iwai
85*07aecc06STakashi IwaiThe available synth and MIDI devices can be found in proc interface.
86*07aecc06STakashi IwaiRun ``cat /proc/asound/seq/oss``, and check the devices. For example,
87*07aecc06STakashi Iwaiif you use an AWE64 card, you'll see like the following:
88*07aecc06STakashi Iwai::
89*07aecc06STakashi Iwai
90*07aecc06STakashi Iwai    OSS sequencer emulation version 0.1.8
91*07aecc06STakashi Iwai    ALSA client number 63
92*07aecc06STakashi Iwai    ALSA receiver port 0
93*07aecc06STakashi Iwai
94*07aecc06STakashi Iwai    Number of applications: 0
95*07aecc06STakashi Iwai
96*07aecc06STakashi Iwai    Number of synth devices: 1
97*07aecc06STakashi Iwai    synth 0: [EMU8000]
98*07aecc06STakashi Iwai      type 0x1 : subtype 0x20 : voices 32
99*07aecc06STakashi Iwai      capabilties : ioctl enabled / load_patch enabled
100*07aecc06STakashi Iwai
101*07aecc06STakashi Iwai    Number of MIDI devices: 3
102*07aecc06STakashi Iwai    midi 0: [Emu8000 Port-0] ALSA port 65:0
103*07aecc06STakashi Iwai      capability write / opened none
104*07aecc06STakashi Iwai
105*07aecc06STakashi Iwai    midi 1: [Emu8000 Port-1] ALSA port 65:1
106*07aecc06STakashi Iwai      capability write / opened none
107*07aecc06STakashi Iwai
108*07aecc06STakashi Iwai    midi 2: [0: MPU-401 (UART)] ALSA port 64:0
109*07aecc06STakashi Iwai      capability read/write / opened none
110*07aecc06STakashi Iwai
111*07aecc06STakashi IwaiNote that the device number may be different from the information of
112*07aecc06STakashi Iwai``/proc/asound/oss-devices`` or ones of the original OSS driver.
113*07aecc06STakashi IwaiUse the device number listed in ``/proc/asound/seq/oss``
114*07aecc06STakashi Iwaito play via OSS sequencer emulation.
115*07aecc06STakashi Iwai
116*07aecc06STakashi IwaiUsing Synthesizer Devices
117*07aecc06STakashi Iwai=========================
118*07aecc06STakashi Iwai
119*07aecc06STakashi IwaiRun your favorite program. I've tested playmidi-2.4, awemidi-0.4.3, gmod-3.1
120*07aecc06STakashi Iwaiand xmp-1.1.5. You can load samples via ``/dev/sequencer`` like sfxload,
121*07aecc06STakashi Iwaitoo.
122*07aecc06STakashi Iwai
123*07aecc06STakashi IwaiIf the lowlevel driver supports multiple access to synth devices (like
124*07aecc06STakashi IwaiEmu8000 driver), two or more applications are allowed to run at the same
125*07aecc06STakashi Iwaitime.
126*07aecc06STakashi Iwai
127*07aecc06STakashi IwaiUsing MIDI Devices
128*07aecc06STakashi Iwai==================
129*07aecc06STakashi Iwai
130*07aecc06STakashi IwaiSo far, only MIDI output was tested. MIDI input was not checked at all,
131*07aecc06STakashi Iwaibut hopefully it will work. Use the device number listed in
132*07aecc06STakashi Iwai``/proc/asound/seq/oss``.
133*07aecc06STakashi IwaiBe aware that these numbers are mostly different from the list in
134*07aecc06STakashi Iwai``/proc/asound/oss-devices``.
135*07aecc06STakashi Iwai
136*07aecc06STakashi IwaiModule Options
137*07aecc06STakashi Iwai==============
138*07aecc06STakashi Iwai
139*07aecc06STakashi IwaiThe following module options are available:
140*07aecc06STakashi Iwai
141*07aecc06STakashi Iwaimaxqlen
142*07aecc06STakashi Iwai  specifies the maximum read/write queue length. This queue is private
143*07aecc06STakashi Iwai  for OSS sequencer, so that it is independent from the queue length of ALSA
144*07aecc06STakashi Iwai  sequencer. Default value is 1024.
145*07aecc06STakashi Iwai
146*07aecc06STakashi Iwaiseq_oss_debug
147*07aecc06STakashi Iwai  specifies the debug level and accepts zero (= no debug message) or
148*07aecc06STakashi Iwai  positive integer. Default value is 0.
149*07aecc06STakashi Iwai
150*07aecc06STakashi IwaiQueue Mechanism
151*07aecc06STakashi Iwai===============
152*07aecc06STakashi Iwai
153*07aecc06STakashi IwaiOSS sequencer emulation uses an ALSA priority queue. The
154*07aecc06STakashi Iwaievents from ``/dev/sequencer`` are processed and put onto the queue
155*07aecc06STakashi Iwaispecified by module option.
156*07aecc06STakashi Iwai
157*07aecc06STakashi IwaiAll the events from ``/dev/sequencer`` are parsed at beginning.
158*07aecc06STakashi IwaiThe timing events are also parsed at this moment, so that the events may
159*07aecc06STakashi Iwaibe processed in real-time. Sending an event ABSTIME 0 switches the operation
160*07aecc06STakashi Iwaimode to real-time mode, and sending an event RELTIME 0 switches it off.
161*07aecc06STakashi IwaiIn the real-time mode, all events are dispatched immediately.
162*07aecc06STakashi Iwai
163*07aecc06STakashi IwaiThe queued events are dispatched to the corresponding ALSA sequencer
164*07aecc06STakashi Iwaiports after scheduled time by ALSA sequencer dispatcher.
165*07aecc06STakashi Iwai
166*07aecc06STakashi IwaiIf the write-queue is full, the application sleeps until a certain amount
167*07aecc06STakashi Iwai(as default one half) becomes empty in blocking mode. The synchronization
168*07aecc06STakashi Iwaito write timing was implemented, too.
169*07aecc06STakashi Iwai
170*07aecc06STakashi IwaiThe input from MIDI devices or echo-back events are stored on read FIFO
171*07aecc06STakashi Iwaiqueue. If application reads ``/dev/sequencer`` in blocking mode, the
172*07aecc06STakashi Iwaiprocess will be awaked.
173*07aecc06STakashi Iwai
174*07aecc06STakashi IwaiInterface to Synthesizer Device
175*07aecc06STakashi Iwai===============================
176*07aecc06STakashi Iwai
177*07aecc06STakashi IwaiRegistration
178*07aecc06STakashi Iwai------------
179*07aecc06STakashi Iwai
180*07aecc06STakashi IwaiTo register an OSS synthesizer device, use snd_seq_oss_synth_register()
181*07aecc06STakashi Iwaifunction:
182*07aecc06STakashi Iwai::
183*07aecc06STakashi Iwai
184*07aecc06STakashi Iwai  int snd_seq_oss_synth_register(char *name, int type, int subtype, int nvoices,
185*07aecc06STakashi Iwai          snd_seq_oss_callback_t *oper, void *private_data)
186*07aecc06STakashi Iwai
187*07aecc06STakashi IwaiThe arguments ``name``, ``type``, ``subtype`` and ``nvoices``
188*07aecc06STakashi Iwaiare used for making the appropriate synth_info structure for ioctl. The
189*07aecc06STakashi Iwaireturn value is an index number of this device. This index must be remembered
190*07aecc06STakashi Iwaifor unregister. If registration is failed, -errno will be returned.
191*07aecc06STakashi Iwai
192*07aecc06STakashi IwaiTo release this device, call snd_seq_oss_synth_unregister() function:
193*07aecc06STakashi Iwai::
194*07aecc06STakashi Iwai
195*07aecc06STakashi Iwai  int snd_seq_oss_synth_unregister(int index)
196*07aecc06STakashi Iwai
197*07aecc06STakashi Iwaiwhere the ``index`` is the index number returned by register function.
198*07aecc06STakashi Iwai
199*07aecc06STakashi IwaiCallbacks
200*07aecc06STakashi Iwai---------
201*07aecc06STakashi Iwai
202*07aecc06STakashi IwaiOSS synthesizer devices have capability for sample downloading and ioctls
203*07aecc06STakashi Iwailike sample reset. In OSS emulation, these special features are realized
204*07aecc06STakashi Iwaiby using callbacks. The registration argument oper is used to specify these
205*07aecc06STakashi Iwaicallbacks. The following callback functions must be defined:
206*07aecc06STakashi Iwai::
207*07aecc06STakashi Iwai
208*07aecc06STakashi Iwai  snd_seq_oss_callback_t:
209*07aecc06STakashi Iwai   int (*open)(snd_seq_oss_arg_t *p, void *closure);
210*07aecc06STakashi Iwai   int (*close)(snd_seq_oss_arg_t *p);
211*07aecc06STakashi Iwai   int (*ioctl)(snd_seq_oss_arg_t *p, unsigned int cmd, unsigned long arg);
212*07aecc06STakashi Iwai   int (*load_patch)(snd_seq_oss_arg_t *p, int format, const char *buf, int offs, int count);
213*07aecc06STakashi Iwai   int (*reset)(snd_seq_oss_arg_t *p);
214*07aecc06STakashi Iwai
215*07aecc06STakashi IwaiExcept for ``open`` and ``close`` callbacks, they are allowed to be NULL.
216*07aecc06STakashi Iwai
217*07aecc06STakashi IwaiEach callback function takes the argument type ``snd_seq_oss_arg_t`` as the
218*07aecc06STakashi Iwaifirst argument.
219*07aecc06STakashi Iwai::
220*07aecc06STakashi Iwai
221*07aecc06STakashi Iwai  struct snd_seq_oss_arg_t {
222*07aecc06STakashi Iwai      int app_index;
223*07aecc06STakashi Iwai      int file_mode;
224*07aecc06STakashi Iwai      int seq_mode;
225*07aecc06STakashi Iwai      snd_seq_addr_t addr;
226*07aecc06STakashi Iwai      void *private_data;
227*07aecc06STakashi Iwai      int event_passing;
228*07aecc06STakashi Iwai  };
229*07aecc06STakashi Iwai
230*07aecc06STakashi IwaiThe first three fields, ``app_index``, ``file_mode`` and ``seq_mode``
231*07aecc06STakashi Iwaiare initialized by OSS sequencer. The ``app_index`` is the application
232*07aecc06STakashi Iwaiindex which is unique to each application opening OSS sequencer. The
233*07aecc06STakashi Iwai``file_mode`` is bit-flags indicating the file operation mode. See
234*07aecc06STakashi Iwai``seq_oss.h`` for its meaning. The ``seq_mode`` is sequencer operation
235*07aecc06STakashi Iwaimode. In the current version, only ``SND_OSSSEQ_MODE_SYNTH`` is used.
236*07aecc06STakashi Iwai
237*07aecc06STakashi IwaiThe next two fields, ``addr`` and ``private_data``, must be
238*07aecc06STakashi Iwaifilled by the synth driver at open callback. The ``addr`` contains
239*07aecc06STakashi Iwaithe address of ALSA sequencer port which is assigned to this device. If
240*07aecc06STakashi Iwaithe driver allocates memory for ``private_data``, it must be released
241*07aecc06STakashi Iwaiin close callback by itself.
242*07aecc06STakashi Iwai
243*07aecc06STakashi IwaiThe last field, ``event_passing``, indicates how to translate note-on
244*07aecc06STakashi Iwai/ off events. In ``PROCESS_EVENTS`` mode, the note 255 is regarded
245*07aecc06STakashi Iwaias velocity change, and key pressure event is passed to the port. In
246*07aecc06STakashi Iwai``PASS_EVENTS`` mode, all note on/off events are passed to the port
247*07aecc06STakashi Iwaiwithout modified. ``PROCESS_KEYPRESS`` mode checks the note above 128
248*07aecc06STakashi Iwaiand regards it as key pressure event (mainly for Emu8000 driver).
249*07aecc06STakashi Iwai
250*07aecc06STakashi IwaiOpen Callback
251*07aecc06STakashi Iwai-------------
252*07aecc06STakashi Iwai
253*07aecc06STakashi IwaiThe ``open`` is called at each time this device is opened by an application
254*07aecc06STakashi Iwaiusing OSS sequencer. This must not be NULL. Typically, the open callback
255*07aecc06STakashi Iwaidoes the following procedure:
256*07aecc06STakashi Iwai
257*07aecc06STakashi Iwai#. Allocate private data record.
258*07aecc06STakashi Iwai#. Create an ALSA sequencer port.
259*07aecc06STakashi Iwai#. Set the new port address on ``arg->addr``.
260*07aecc06STakashi Iwai#. Set the private data record pointer on ``arg->private_data``.
261*07aecc06STakashi Iwai
262*07aecc06STakashi IwaiNote that the type bit-flags in port_info of this synth port must NOT contain
263*07aecc06STakashi Iwai``TYPE_MIDI_GENERIC``
264*07aecc06STakashi Iwaibit. Instead, ``TYPE_SPECIFIC`` should be used. Also, ``CAP_SUBSCRIPTION``
265*07aecc06STakashi Iwaibit should NOT be included, too. This is necessary to tell it from other
266*07aecc06STakashi Iwainormal MIDI devices. If the open procedure succeeded, return zero. Otherwise,
267*07aecc06STakashi Iwaireturn -errno.
268*07aecc06STakashi Iwai
269*07aecc06STakashi IwaiIoctl Callback
270*07aecc06STakashi Iwai--------------
271*07aecc06STakashi Iwai
272*07aecc06STakashi IwaiThe ``ioctl`` callback is called when the sequencer receives device-specific
273*07aecc06STakashi Iwaiioctls. The following two ioctls should be processed by this callback:
274*07aecc06STakashi Iwai
275*07aecc06STakashi IwaiIOCTL_SEQ_RESET_SAMPLES
276*07aecc06STakashi Iwai    reset all samples on memory -- return 0
277*07aecc06STakashi Iwai
278*07aecc06STakashi IwaiIOCTL_SYNTH_MEMAVL
279*07aecc06STakashi Iwai    return the available memory size
280*07aecc06STakashi Iwai
281*07aecc06STakashi IwaiFM_4OP_ENABLE
282*07aecc06STakashi Iwai    can be ignored usually
283*07aecc06STakashi Iwai
284*07aecc06STakashi IwaiThe other ioctls are processed inside the sequencer without passing to
285*07aecc06STakashi Iwaithe lowlevel driver.
286*07aecc06STakashi Iwai
287*07aecc06STakashi IwaiLoad_Patch Callback
288*07aecc06STakashi Iwai-------------------
289*07aecc06STakashi Iwai
290*07aecc06STakashi IwaiThe ``load_patch`` callback is used for sample-downloading. This callback
291*07aecc06STakashi Iwaimust read the data on user-space and transfer to each device. Return 0
292*07aecc06STakashi Iwaiif succeeded, and -errno if failed. The format argument is the patch key
293*07aecc06STakashi Iwaiin patch_info record. The buf is user-space pointer where patch_info record
294*07aecc06STakashi Iwaiis stored. The offs can be ignored. The count is total data size of this
295*07aecc06STakashi Iwaisample data.
296*07aecc06STakashi Iwai
297*07aecc06STakashi IwaiClose Callback
298*07aecc06STakashi Iwai--------------
299*07aecc06STakashi Iwai
300*07aecc06STakashi IwaiThe ``close`` callback is called when this device is closed by the
301*07aecc06STakashi Iwaiapplication. If any private data was allocated in open callback, it must
302*07aecc06STakashi Iwaibe released in the close callback. The deletion of ALSA port should be
303*07aecc06STakashi Iwaidone here, too. This callback must not be NULL.
304*07aecc06STakashi Iwai
305*07aecc06STakashi IwaiReset Callback
306*07aecc06STakashi Iwai--------------
307*07aecc06STakashi Iwai
308*07aecc06STakashi IwaiThe ``reset`` callback is called when sequencer device is reset or
309*07aecc06STakashi Iwaiclosed by applications. The callback should turn off the sounds on the
310*07aecc06STakashi Iwairelevant port immediately, and initialize the status of the port. If this
311*07aecc06STakashi Iwaicallback is undefined, OSS seq sends a ``HEARTBEAT`` event to the
312*07aecc06STakashi Iwaiport.
313*07aecc06STakashi Iwai
314*07aecc06STakashi IwaiEvents
315*07aecc06STakashi Iwai======
316*07aecc06STakashi Iwai
317*07aecc06STakashi IwaiMost of the events are processed by sequencer and translated to the adequate
318*07aecc06STakashi IwaiALSA sequencer events, so that each synth device can receive by input_event
319*07aecc06STakashi Iwaicallback of ALSA sequencer port. The following ALSA events should be
320*07aecc06STakashi Iwaiimplemented by the driver:
321*07aecc06STakashi Iwai
322*07aecc06STakashi Iwai=============	===================
323*07aecc06STakashi IwaiALSA event	Original OSS events
324*07aecc06STakashi Iwai=============	===================
325*07aecc06STakashi IwaiNOTEON		SEQ_NOTEON, MIDI_NOTEON
326*07aecc06STakashi IwaiNOTE		SEQ_NOTEOFF, MIDI_NOTEOFF
327*07aecc06STakashi IwaiKEYPRESS	MIDI_KEY_PRESSURE
328*07aecc06STakashi IwaiCHANPRESS	SEQ_AFTERTOUCH, MIDI_CHN_PRESSURE
329*07aecc06STakashi IwaiPGMCHANGE	SEQ_PGMCHANGE, MIDI_PGM_CHANGE
330*07aecc06STakashi IwaiPITCHBEND	SEQ_CONTROLLER(CTRL_PITCH_BENDER),
331*07aecc06STakashi Iwai		MIDI_PITCH_BEND
332*07aecc06STakashi IwaiCONTROLLER	MIDI_CTL_CHANGE,
333*07aecc06STakashi Iwai		SEQ_BALANCE (with CTL_PAN)
334*07aecc06STakashi IwaiCONTROL14	SEQ_CONTROLLER
335*07aecc06STakashi IwaiREGPARAM	SEQ_CONTROLLER(CTRL_PITCH_BENDER_RANGE)
336*07aecc06STakashi IwaiSYSEX		SEQ_SYSEX
337*07aecc06STakashi Iwai=============	===================
338*07aecc06STakashi Iwai
339*07aecc06STakashi IwaiThe most of these behavior can be realized by MIDI emulation driver
340*07aecc06STakashi Iwaiincluded in the Emu8000 lowlevel driver. In the future release, this module
341*07aecc06STakashi Iwaiwill be independent.
342*07aecc06STakashi Iwai
343*07aecc06STakashi IwaiSome OSS events (``SEQ_PRIVATE`` and ``SEQ_VOLUME`` events) are passed as event
344*07aecc06STakashi Iwaitype SND_SEQ_OSS_PRIVATE.  The OSS sequencer passes these event 8 byte
345*07aecc06STakashi Iwaipackets without any modification. The lowlevel driver should process these
346*07aecc06STakashi Iwaievents appropriately.
347*07aecc06STakashi Iwai
348*07aecc06STakashi IwaiInterface to MIDI Device
349*07aecc06STakashi Iwai========================
350*07aecc06STakashi Iwai
351*07aecc06STakashi IwaiSince the OSS emulation probes the creation and deletion of ALSA MIDI
352*07aecc06STakashi Iwaisequencer ports automatically by receiving announcement from ALSA
353*07aecc06STakashi Iwaisequencer, the MIDI devices don't need to be registered explicitly
354*07aecc06STakashi Iwailike synth devices.
355*07aecc06STakashi IwaiHowever, the MIDI port_info registered to ALSA sequencer must include
356*07aecc06STakashi Iwaia group name ``SND_SEQ_GROUP_DEVICE`` and a capability-bit
357*07aecc06STakashi Iwai``CAP_READ`` or ``CAP_WRITE``. Also, subscription capabilities,
358*07aecc06STakashi Iwai``CAP_SUBS_READ`` or ``CAP_SUBS_WRITE``, must be defined, too. If
359*07aecc06STakashi Iwaithese conditions are not satisfied, the port is not registered as OSS
360*07aecc06STakashi Iwaisequencer MIDI device.
361*07aecc06STakashi Iwai
362*07aecc06STakashi IwaiThe events via MIDI devices are parsed in OSS sequencer and converted
363*07aecc06STakashi Iwaito the corresponding ALSA sequencer events. The input from MIDI sequencer
364*07aecc06STakashi Iwaiis also converted to MIDI byte events by OSS sequencer. This works just
365*07aecc06STakashi Iwaia reverse way of seq_midi module.
366*07aecc06STakashi Iwai
367*07aecc06STakashi IwaiKnown Problems / TODO's
368*07aecc06STakashi Iwai=======================
369*07aecc06STakashi Iwai
370*07aecc06STakashi Iwai* Patch loading via ALSA instrument layer is not implemented yet.
371*07aecc06STakashi Iwai
372