1 =============================== 1 =============================== 2 OSS Sequencer Emulation on ALSA 2 OSS Sequencer Emulation on ALSA 3 =============================== 3 =============================== 4 4 5 Copyright (c) 1998,1999 by Takashi Iwai 5 Copyright (c) 1998,1999 by Takashi Iwai 6 6 7 ver.0.1.8; Nov. 16, 1999 7 ver.0.1.8; Nov. 16, 1999 8 8 9 Description 9 Description 10 =========== 10 =========== 11 11 12 This directory contains the OSS sequencer emul 12 This directory contains the OSS sequencer emulation driver on ALSA. Note 13 that this program is still in the development 13 that this program is still in the development state. 14 14 15 What this does - it provides the emulation of 15 What this does - it provides the emulation of the OSS sequencer, access 16 via ``/dev/sequencer`` and ``/dev/music`` devi 16 via ``/dev/sequencer`` and ``/dev/music`` devices. 17 The most of applications using OSS can run if 17 The most of applications using OSS can run if the appropriate ALSA 18 sequencer is prepared. 18 sequencer is prepared. 19 19 20 The following features are emulated by this dr 20 The following features are emulated by this driver: 21 21 22 * Normal sequencer and MIDI events: 22 * Normal sequencer and MIDI events: 23 23 24 They are converted to the ALSA sequencer e 24 They are converted to the ALSA sequencer events, and sent to the 25 corresponding port. 25 corresponding port. 26 26 27 * Timer events: 27 * Timer events: 28 28 29 The timer is not selectable by ioctl. The 29 The timer is not selectable by ioctl. The control rate is fixed to 30 100 regardless of HZ. That is, even on Alp 30 100 regardless of HZ. That is, even on Alpha system, a tick is always 31 1/100 second. The base rate and tempo can 31 1/100 second. The base rate and tempo can be changed in ``/dev/music``. 32 32 33 * Patch loading: 33 * Patch loading: 34 34 35 It purely depends on the synth drivers whe 35 It purely depends on the synth drivers whether it's supported since 36 the patch loading is realized by callback 36 the patch loading is realized by callback to the synth driver. 37 37 38 * I/O controls: 38 * I/O controls: 39 39 40 Most of controls are accepted. Some contro 40 Most of controls are accepted. Some controls 41 are dependent on the synth driver, as well 41 are dependent on the synth driver, as well as even on original OSS. 42 42 43 Furthermore, you can find the following advanc 43 Furthermore, you can find the following advanced features: 44 44 45 * Better queue mechanism: 45 * Better queue mechanism: 46 46 47 The events are queued before processing th 47 The events are queued before processing them. 48 48 49 * Multiple applications: 49 * Multiple applications: 50 50 51 You can run two or more applications simul 51 You can run two or more applications simultaneously (even for OSS 52 sequencer)! 52 sequencer)! 53 However, each MIDI device is exclusive - t 53 However, each MIDI device is exclusive - that is, if a MIDI device 54 is opened once by some application, other 54 is opened once by some application, other applications can't use 55 it. No such a restriction in synth devices 55 it. No such a restriction in synth devices. 56 56 57 * Real-time event processing: 57 * Real-time event processing: 58 58 59 The events can be processed in real time w 59 The events can be processed in real time without using out of bound 60 ioctl. To switch to real-time mode, send A 60 ioctl. To switch to real-time mode, send ABSTIME 0 event. The followed 61 events will be processed in real-time with 61 events will be processed in real-time without queued. To switch off the 62 real-time mode, send RELTIME 0 event. 62 real-time mode, send RELTIME 0 event. 63 63 64 * ``/proc`` interface: 64 * ``/proc`` interface: 65 65 66 The status of applications and devices can 66 The status of applications and devices can be shown via 67 ``/proc/asound/seq/oss`` at any time. In t 67 ``/proc/asound/seq/oss`` at any time. In the later version, 68 configuration will be changed via ``/proc` 68 configuration will be changed via ``/proc`` interface, too. 69 69 70 70 71 Installation 71 Installation 72 ============ 72 ============ 73 73 74 Run configure script with both sequencer suppo 74 Run configure script with both sequencer support (``--with-sequencer=yes``) 75 and OSS emulation (``--with-oss=yes``) options 75 and OSS emulation (``--with-oss=yes``) options. A module ``snd-seq-oss.o`` 76 will be created. If the synth module of your s 76 will be created. If the synth module of your sound card supports for OSS 77 emulation (so far, only Emu8000 driver), this 77 emulation (so far, only Emu8000 driver), this module will be loaded 78 automatically. 78 automatically. 79 Otherwise, you need to load this module manual 79 Otherwise, you need to load this module manually. 80 80 81 At beginning, this module probes all the MIDI 81 At beginning, this module probes all the MIDI ports which have been 82 already connected to the sequencer. Once after 82 already connected to the sequencer. Once after that, the creation and deletion 83 of ports are watched by announcement mechanism 83 of ports are watched by announcement mechanism of ALSA sequencer. 84 84 85 The available synth and MIDI devices can be fo 85 The available synth and MIDI devices can be found in proc interface. 86 Run ``cat /proc/asound/seq/oss``, and check th 86 Run ``cat /proc/asound/seq/oss``, and check the devices. For example, 87 if you use an AWE64 card, you'll see like the 87 if you use an AWE64 card, you'll see like the following: 88 :: 88 :: 89 89 90 OSS sequencer emulation version 0.1.8 90 OSS sequencer emulation version 0.1.8 91 ALSA client number 63 91 ALSA client number 63 92 ALSA receiver port 0 92 ALSA receiver port 0 93 93 94 Number of applications: 0 94 Number of applications: 0 95 95 96 Number of synth devices: 1 96 Number of synth devices: 1 97 synth 0: [EMU8000] 97 synth 0: [EMU8000] 98 type 0x1 : subtype 0x20 : voices 32 98 type 0x1 : subtype 0x20 : voices 32 99 capabilities : ioctl enabled / load_patc !! 99 capabilties : ioctl enabled / load_patch enabled 100 100 101 Number of MIDI devices: 3 101 Number of MIDI devices: 3 102 midi 0: [Emu8000 Port-0] ALSA port 65:0 102 midi 0: [Emu8000 Port-0] ALSA port 65:0 103 capability write / opened none 103 capability write / opened none 104 104 105 midi 1: [Emu8000 Port-1] ALSA port 65:1 105 midi 1: [Emu8000 Port-1] ALSA port 65:1 106 capability write / opened none 106 capability write / opened none 107 107 108 midi 2: [0: MPU-401 (UART)] ALSA port 64:0 108 midi 2: [0: MPU-401 (UART)] ALSA port 64:0 109 capability read/write / opened none 109 capability read/write / opened none 110 110 111 Note that the device number may be different f 111 Note that the device number may be different from the information of 112 ``/proc/asound/oss-devices`` or ones of the or 112 ``/proc/asound/oss-devices`` or ones of the original OSS driver. 113 Use the device number listed in ``/proc/asound 113 Use the device number listed in ``/proc/asound/seq/oss`` 114 to play via OSS sequencer emulation. 114 to play via OSS sequencer emulation. 115 115 116 Using Synthesizer Devices 116 Using Synthesizer Devices 117 ========================= 117 ========================= 118 118 119 Run your favorite program. I've tested playmid 119 Run your favorite program. I've tested playmidi-2.4, awemidi-0.4.3, gmod-3.1 120 and xmp-1.1.5. You can load samples via ``/dev 120 and xmp-1.1.5. You can load samples via ``/dev/sequencer`` like sfxload, 121 too. 121 too. 122 122 123 If the lowlevel driver supports multiple acces 123 If the lowlevel driver supports multiple access to synth devices (like 124 Emu8000 driver), two or more applications are 124 Emu8000 driver), two or more applications are allowed to run at the same 125 time. 125 time. 126 126 127 Using MIDI Devices 127 Using MIDI Devices 128 ================== 128 ================== 129 129 130 So far, only MIDI output was tested. MIDI inpu 130 So far, only MIDI output was tested. MIDI input was not checked at all, 131 but hopefully it will work. Use the device num 131 but hopefully it will work. Use the device number listed in 132 ``/proc/asound/seq/oss``. 132 ``/proc/asound/seq/oss``. 133 Be aware that these numbers are mostly differe 133 Be aware that these numbers are mostly different from the list in 134 ``/proc/asound/oss-devices``. 134 ``/proc/asound/oss-devices``. 135 135 136 Module Options 136 Module Options 137 ============== 137 ============== 138 138 139 The following module options are available: 139 The following module options are available: 140 140 141 maxqlen 141 maxqlen 142 specifies the maximum read/write queue lengt 142 specifies the maximum read/write queue length. This queue is private 143 for OSS sequencer, so that it is independent 143 for OSS sequencer, so that it is independent from the queue length of ALSA 144 sequencer. Default value is 1024. 144 sequencer. Default value is 1024. 145 145 146 seq_oss_debug 146 seq_oss_debug 147 specifies the debug level and accepts zero ( 147 specifies the debug level and accepts zero (= no debug message) or 148 positive integer. Default value is 0. 148 positive integer. Default value is 0. 149 149 150 Queue Mechanism 150 Queue Mechanism 151 =============== 151 =============== 152 152 153 OSS sequencer emulation uses an ALSA priority 153 OSS sequencer emulation uses an ALSA priority queue. The 154 events from ``/dev/sequencer`` are processed a 154 events from ``/dev/sequencer`` are processed and put onto the queue 155 specified by module option. 155 specified by module option. 156 156 157 All the events from ``/dev/sequencer`` are par 157 All the events from ``/dev/sequencer`` are parsed at beginning. 158 The timing events are also parsed at this mome 158 The timing events are also parsed at this moment, so that the events may 159 be processed in real-time. Sending an event AB 159 be processed in real-time. Sending an event ABSTIME 0 switches the operation 160 mode to real-time mode, and sending an event R 160 mode to real-time mode, and sending an event RELTIME 0 switches it off. 161 In the real-time mode, all events are dispatch 161 In the real-time mode, all events are dispatched immediately. 162 162 163 The queued events are dispatched to the corres 163 The queued events are dispatched to the corresponding ALSA sequencer 164 ports after scheduled time by ALSA sequencer d 164 ports after scheduled time by ALSA sequencer dispatcher. 165 165 166 If the write-queue is full, the application sl 166 If the write-queue is full, the application sleeps until a certain amount 167 (as default one half) becomes empty in blockin 167 (as default one half) becomes empty in blocking mode. The synchronization 168 to write timing was implemented, too. 168 to write timing was implemented, too. 169 169 170 The input from MIDI devices or echo-back event 170 The input from MIDI devices or echo-back events are stored on read FIFO 171 queue. If application reads ``/dev/sequencer`` 171 queue. If application reads ``/dev/sequencer`` in blocking mode, the 172 process will be awaked. 172 process will be awaked. 173 173 174 Interface to Synthesizer Device 174 Interface to Synthesizer Device 175 =============================== 175 =============================== 176 176 177 Registration 177 Registration 178 ------------ 178 ------------ 179 179 180 To register an OSS synthesizer device, use snd 180 To register an OSS synthesizer device, use snd_seq_oss_synth_register() 181 function: 181 function: 182 :: 182 :: 183 183 184 int snd_seq_oss_synth_register(char *name, i 184 int snd_seq_oss_synth_register(char *name, int type, int subtype, int nvoices, 185 snd_seq_oss_callback_t *oper, void * 185 snd_seq_oss_callback_t *oper, void *private_data) 186 186 187 The arguments ``name``, ``type``, ``subtype`` 187 The arguments ``name``, ``type``, ``subtype`` and ``nvoices`` 188 are used for making the appropriate synth_info 188 are used for making the appropriate synth_info structure for ioctl. The 189 return value is an index number of this device 189 return value is an index number of this device. This index must be remembered 190 for unregister. If registration is failed, -er 190 for unregister. If registration is failed, -errno will be returned. 191 191 192 To release this device, call snd_seq_oss_synth 192 To release this device, call snd_seq_oss_synth_unregister() function: 193 :: 193 :: 194 194 195 int snd_seq_oss_synth_unregister(int index) 195 int snd_seq_oss_synth_unregister(int index) 196 196 197 where the ``index`` is the index number return 197 where the ``index`` is the index number returned by register function. 198 198 199 Callbacks 199 Callbacks 200 --------- 200 --------- 201 201 202 OSS synthesizer devices have capability for sa 202 OSS synthesizer devices have capability for sample downloading and ioctls 203 like sample reset. In OSS emulation, these spe 203 like sample reset. In OSS emulation, these special features are realized 204 by using callbacks. The registration argument 204 by using callbacks. The registration argument oper is used to specify these 205 callbacks. The following callback functions mu 205 callbacks. The following callback functions must be defined: 206 :: 206 :: 207 207 208 snd_seq_oss_callback_t: 208 snd_seq_oss_callback_t: 209 int (*open)(snd_seq_oss_arg_t *p, void *clo 209 int (*open)(snd_seq_oss_arg_t *p, void *closure); 210 int (*close)(snd_seq_oss_arg_t *p); 210 int (*close)(snd_seq_oss_arg_t *p); 211 int (*ioctl)(snd_seq_oss_arg_t *p, unsigned 211 int (*ioctl)(snd_seq_oss_arg_t *p, unsigned int cmd, unsigned long arg); 212 int (*load_patch)(snd_seq_oss_arg_t *p, int 212 int (*load_patch)(snd_seq_oss_arg_t *p, int format, const char *buf, int offs, int count); 213 int (*reset)(snd_seq_oss_arg_t *p); 213 int (*reset)(snd_seq_oss_arg_t *p); 214 214 215 Except for ``open`` and ``close`` callbacks, t 215 Except for ``open`` and ``close`` callbacks, they are allowed to be NULL. 216 216 217 Each callback function takes the argument type 217 Each callback function takes the argument type ``snd_seq_oss_arg_t`` as the 218 first argument. 218 first argument. 219 :: 219 :: 220 220 221 struct snd_seq_oss_arg_t { 221 struct snd_seq_oss_arg_t { 222 int app_index; 222 int app_index; 223 int file_mode; 223 int file_mode; 224 int seq_mode; 224 int seq_mode; 225 snd_seq_addr_t addr; 225 snd_seq_addr_t addr; 226 void *private_data; 226 void *private_data; 227 int event_passing; 227 int event_passing; 228 }; 228 }; 229 229 230 The first three fields, ``app_index``, ``file_ 230 The first three fields, ``app_index``, ``file_mode`` and ``seq_mode`` 231 are initialized by OSS sequencer. The ``app_in 231 are initialized by OSS sequencer. The ``app_index`` is the application 232 index which is unique to each application open 232 index which is unique to each application opening OSS sequencer. The 233 ``file_mode`` is bit-flags indicating the file 233 ``file_mode`` is bit-flags indicating the file operation mode. See 234 ``seq_oss.h`` for its meaning. The ``seq_mode` 234 ``seq_oss.h`` for its meaning. The ``seq_mode`` is sequencer operation 235 mode. In the current version, only ``SND_OSSSE 235 mode. In the current version, only ``SND_OSSSEQ_MODE_SYNTH`` is used. 236 236 237 The next two fields, ``addr`` and ``private_da 237 The next two fields, ``addr`` and ``private_data``, must be 238 filled by the synth driver at open callback. T 238 filled by the synth driver at open callback. The ``addr`` contains 239 the address of ALSA sequencer port which is as 239 the address of ALSA sequencer port which is assigned to this device. If 240 the driver allocates memory for ``private_data 240 the driver allocates memory for ``private_data``, it must be released 241 in close callback by itself. 241 in close callback by itself. 242 242 243 The last field, ``event_passing``, indicates h 243 The last field, ``event_passing``, indicates how to translate note-on 244 / off events. In ``PROCESS_EVENTS`` mode, the 244 / off events. In ``PROCESS_EVENTS`` mode, the note 255 is regarded 245 as velocity change, and key pressure event is 245 as velocity change, and key pressure event is passed to the port. In 246 ``PASS_EVENTS`` mode, all note on/off events a 246 ``PASS_EVENTS`` mode, all note on/off events are passed to the port 247 without modified. ``PROCESS_KEYPRESS`` mode ch 247 without modified. ``PROCESS_KEYPRESS`` mode checks the note above 128 248 and regards it as key pressure event (mainly f 248 and regards it as key pressure event (mainly for Emu8000 driver). 249 249 250 Open Callback 250 Open Callback 251 ------------- 251 ------------- 252 252 253 The ``open`` is called at each time this devic 253 The ``open`` is called at each time this device is opened by an application 254 using OSS sequencer. This must not be NULL. Ty 254 using OSS sequencer. This must not be NULL. Typically, the open callback 255 does the following procedure: 255 does the following procedure: 256 256 257 #. Allocate private data record. 257 #. Allocate private data record. 258 #. Create an ALSA sequencer port. 258 #. Create an ALSA sequencer port. 259 #. Set the new port address on ``arg->addr``. 259 #. Set the new port address on ``arg->addr``. 260 #. Set the private data record pointer on ``ar 260 #. Set the private data record pointer on ``arg->private_data``. 261 261 262 Note that the type bit-flags in port_info of t 262 Note that the type bit-flags in port_info of this synth port must NOT contain 263 ``TYPE_MIDI_GENERIC`` 263 ``TYPE_MIDI_GENERIC`` 264 bit. Instead, ``TYPE_SPECIFIC`` should be used 264 bit. Instead, ``TYPE_SPECIFIC`` should be used. Also, ``CAP_SUBSCRIPTION`` 265 bit should NOT be included, too. This is neces 265 bit should NOT be included, too. This is necessary to tell it from other 266 normal MIDI devices. If the open procedure suc 266 normal MIDI devices. If the open procedure succeeded, return zero. Otherwise, 267 return -errno. 267 return -errno. 268 268 269 Ioctl Callback 269 Ioctl Callback 270 -------------- 270 -------------- 271 271 272 The ``ioctl`` callback is called when the sequ 272 The ``ioctl`` callback is called when the sequencer receives device-specific 273 ioctls. The following two ioctls should be pro 273 ioctls. The following two ioctls should be processed by this callback: 274 274 275 IOCTL_SEQ_RESET_SAMPLES 275 IOCTL_SEQ_RESET_SAMPLES 276 reset all samples on memory -- return 0 276 reset all samples on memory -- return 0 277 277 278 IOCTL_SYNTH_MEMAVL 278 IOCTL_SYNTH_MEMAVL 279 return the available memory size 279 return the available memory size 280 280 281 FM_4OP_ENABLE 281 FM_4OP_ENABLE 282 can be ignored usually 282 can be ignored usually 283 283 284 The other ioctls are processed inside the sequ 284 The other ioctls are processed inside the sequencer without passing to 285 the lowlevel driver. 285 the lowlevel driver. 286 286 287 Load_Patch Callback 287 Load_Patch Callback 288 ------------------- 288 ------------------- 289 289 290 The ``load_patch`` callback is used for sample 290 The ``load_patch`` callback is used for sample-downloading. This callback 291 must read the data on user-space and transfer 291 must read the data on user-space and transfer to each device. Return 0 292 if succeeded, and -errno if failed. The format 292 if succeeded, and -errno if failed. The format argument is the patch key 293 in patch_info record. The buf is user-space po 293 in patch_info record. The buf is user-space pointer where patch_info record 294 is stored. The offs can be ignored. The count 294 is stored. The offs can be ignored. The count is total data size of this 295 sample data. 295 sample data. 296 296 297 Close Callback 297 Close Callback 298 -------------- 298 -------------- 299 299 300 The ``close`` callback is called when this dev 300 The ``close`` callback is called when this device is closed by the 301 application. If any private data was allocated 301 application. If any private data was allocated in open callback, it must 302 be released in the close callback. The deletio 302 be released in the close callback. The deletion of ALSA port should be 303 done here, too. This callback must not be NULL 303 done here, too. This callback must not be NULL. 304 304 305 Reset Callback 305 Reset Callback 306 -------------- 306 -------------- 307 307 308 The ``reset`` callback is called when sequence 308 The ``reset`` callback is called when sequencer device is reset or 309 closed by applications. The callback should tu 309 closed by applications. The callback should turn off the sounds on the 310 relevant port immediately, and initialize the 310 relevant port immediately, and initialize the status of the port. If this 311 callback is undefined, OSS seq sends a ``HEART 311 callback is undefined, OSS seq sends a ``HEARTBEAT`` event to the 312 port. 312 port. 313 313 314 Events 314 Events 315 ====== 315 ====== 316 316 317 Most of the events are processed by sequencer 317 Most of the events are processed by sequencer and translated to the adequate 318 ALSA sequencer events, so that each synth devi 318 ALSA sequencer events, so that each synth device can receive by input_event 319 callback of ALSA sequencer port. The following 319 callback of ALSA sequencer port. The following ALSA events should be 320 implemented by the driver: 320 implemented by the driver: 321 321 322 ============= =================== 322 ============= =================== 323 ALSA event Original OSS events 323 ALSA event Original OSS events 324 ============= =================== 324 ============= =================== 325 NOTEON SEQ_NOTEON, MIDI_NOTEON 325 NOTEON SEQ_NOTEON, MIDI_NOTEON 326 NOTE SEQ_NOTEOFF, MIDI_NOTEOFF 326 NOTE SEQ_NOTEOFF, MIDI_NOTEOFF 327 KEYPRESS MIDI_KEY_PRESSURE 327 KEYPRESS MIDI_KEY_PRESSURE 328 CHANPRESS SEQ_AFTERTOUCH, MIDI_CHN_PRESS 328 CHANPRESS SEQ_AFTERTOUCH, MIDI_CHN_PRESSURE 329 PGMCHANGE SEQ_PGMCHANGE, MIDI_PGM_CHANGE 329 PGMCHANGE SEQ_PGMCHANGE, MIDI_PGM_CHANGE 330 PITCHBEND SEQ_CONTROLLER(CTRL_PITCH_BEND 330 PITCHBEND SEQ_CONTROLLER(CTRL_PITCH_BENDER), 331 MIDI_PITCH_BEND 331 MIDI_PITCH_BEND 332 CONTROLLER MIDI_CTL_CHANGE, 332 CONTROLLER MIDI_CTL_CHANGE, 333 SEQ_BALANCE (with CTL_PAN) 333 SEQ_BALANCE (with CTL_PAN) 334 CONTROL14 SEQ_CONTROLLER 334 CONTROL14 SEQ_CONTROLLER 335 REGPARAM SEQ_CONTROLLER(CTRL_PITCH_BEND 335 REGPARAM SEQ_CONTROLLER(CTRL_PITCH_BENDER_RANGE) 336 SYSEX SEQ_SYSEX 336 SYSEX SEQ_SYSEX 337 ============= =================== 337 ============= =================== 338 338 339 The most of these behavior can be realized by 339 The most of these behavior can be realized by MIDI emulation driver 340 included in the Emu8000 lowlevel driver. In th 340 included in the Emu8000 lowlevel driver. In the future release, this module 341 will be independent. 341 will be independent. 342 342 343 Some OSS events (``SEQ_PRIVATE`` and ``SEQ_VOL 343 Some OSS events (``SEQ_PRIVATE`` and ``SEQ_VOLUME`` events) are passed as event 344 type SND_SEQ_OSS_PRIVATE. The OSS sequencer p 344 type SND_SEQ_OSS_PRIVATE. The OSS sequencer passes these event 8 byte 345 packets without any modification. The lowlevel 345 packets without any modification. The lowlevel driver should process these 346 events appropriately. 346 events appropriately. 347 347 348 Interface to MIDI Device 348 Interface to MIDI Device 349 ======================== 349 ======================== 350 350 351 Since the OSS emulation probes the creation an 351 Since the OSS emulation probes the creation and deletion of ALSA MIDI 352 sequencer ports automatically by receiving ann 352 sequencer ports automatically by receiving announcement from ALSA 353 sequencer, the MIDI devices don't need to be r 353 sequencer, the MIDI devices don't need to be registered explicitly 354 like synth devices. 354 like synth devices. 355 However, the MIDI port_info registered to ALSA 355 However, the MIDI port_info registered to ALSA sequencer must include 356 a group name ``SND_SEQ_GROUP_DEVICE`` and a ca 356 a group name ``SND_SEQ_GROUP_DEVICE`` and a capability-bit 357 ``CAP_READ`` or ``CAP_WRITE``. Also, subscript 357 ``CAP_READ`` or ``CAP_WRITE``. Also, subscription capabilities, 358 ``CAP_SUBS_READ`` or ``CAP_SUBS_WRITE``, must 358 ``CAP_SUBS_READ`` or ``CAP_SUBS_WRITE``, must be defined, too. If 359 these conditions are not satisfied, the port i 359 these conditions are not satisfied, the port is not registered as OSS 360 sequencer MIDI device. 360 sequencer MIDI device. 361 361 362 The events via MIDI devices are parsed in OSS 362 The events via MIDI devices are parsed in OSS sequencer and converted 363 to the corresponding ALSA sequencer events. Th 363 to the corresponding ALSA sequencer events. The input from MIDI sequencer 364 is also converted to MIDI byte events by OSS s 364 is also converted to MIDI byte events by OSS sequencer. This works just 365 a reverse way of seq_midi module. 365 a reverse way of seq_midi module. 366 366 367 Known Problems / TODO's 367 Known Problems / TODO's 368 ======================= 368 ======================= 369 369 370 * Patch loading via ALSA instrument layer is n 370 * Patch loading via ALSA instrument layer is not implemented yet. 371 371
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.