Author: Michael Minn <michael@michaelminn.com>
July 18, 2002
Describes installation and operation of USBUA100, a Linux kernel module device driver and console program for the Roland UA-100 USB MIDI/Audio desktop music production device. USBUA100 also supports MIDI input/output for the Roland UM-1 USB MIDI adapter and the Roland SC-8850 MIDI Sound Module.
1.1 Capabilities and Deficiencies
1.2 Version History & Downloads
2.1 Module Compilation & Installation
2.2 Boot-time Load
2.3 Testing
2.4 USB-MIDI
3.1 Dynamic Name Assignment
3.2 /dev/midi
3.3 /dev/dsp
4.1 usbua100mix
4.2 usbua100sysex
5.1 MIDI Protocol
5.2 Audio Protocol
USBUA100 is a Linux kernel module device driver for the Roland UA-100 USB MIDI/Audio desktop music production device. The Roland UA-100 is a USB desktop music production tool providing MIDI input/output and high-quality 16-bit digital output. A QT-based X-Windows mixer console is also provided for controlling the UA-100's internal mixer and extensive array of effects.
Because the Roland desktop music products seem to use similar USB/MIDI protocols, USBUA100 also supports MIDI input/output via the Roland UM-1 MIDI adapter and the Roland SC-8850 MIDI Sound Module. Support for other Roland desktop MIDI products is not provided but can probably be added with relative programming ease.
Edirol, Roland's desktop music hardware distributor in the United States, has declined either to develop Linux drivers or provide specs so the open source community could develop a driver. Therefore, USBUA100 was developed based on work done by other Linux devlopers as well as USB traces on MS Windows(tm) and extensive experimentation. As such, it cannot guarantee full-featured and problem-free operation.
I wish to acknowledge a huge debt of gratitude to Daisuke Nagano for developing the USB-MIDI kernel module that supports MIDI on the Roland desktop music products. Thanks also go out to Roland and Tom for writing USB Snoopy/SniffUSB the MS-Windows software USB packet sniffer used to investigate the UA-100 USB protocol. Finally, Markus figured out the strange write URB protocol which permitted simpler code and reduced latency.
While USBUA100 is functional within the limited range of use that it has been subjected to, it has not been tested on different systems or different Linux distributions. It has been released at this stage in the hopes that other UA-100 owners will give it a try and provide feedback needed to work all the bugs out.
Linux Distributions: USBUA100 has only been tested on a Red Hat 7.2 distribution (with a 2.4 kernel). I got it to compile on my Red Hat 7.0 (2.2 kernel) machine but did not do more than cursory run.
MIDI Device Files: MIDI input and output is relatively simple and seems pretty solid through the /dev/midi device files. The exact file names (i.e. /dev/midi00, /dev/midi01) are assigned dynamically and therefore system dependent. Name assignments are discussed later.
/dev/sequencer and /dev/mixer: Despite an extraordinary effort, I was unable to get USBUA100 to work with /dev/sequencer due to the arcane complexity of the OSS interface. Therefore, USBUA100 MIDI devices will not be visible under /dev/sequencer and any program (such as playmidi or kmid) that uses /dev/sequencer will not work with USBUA100. Similarly, there is no ALSA (Advanced Linux Sound System) support for USBUA100 and no /dev/mixer support. A graphical mixer program is provided and discussed later.
Audio Sample Formats: USBUA100 currently has OUTPUT sample rate and bit resolution conversion for 1/2/4 channels, 8/16 bit and 44.1khz/22.05khz/11.025khz PCM audio. There is no sample rate or resolution conversion capability for input other than stereo 16-bit PCM (i.e. the native format of the UA-100).
Audio Quality: Audio input and output is relatively clean on my 600Mhz laptop, although there are occasional timing glitches that result in sporadic tics and dropouts.
Channels: Although the UA-100 has two audio output channels (i.e. two stereo D/A convertors), the USB protocol requires sending data for both channels simultaneously. To simplify implementation, only one audio device file (i.e. /dev/dsp or /dev/dsp1) is provided. While it writes stereo output to the first output channel, it supports quadraphonic (4-channel) writes which write to both.
Mixer: The USBUA100MIX console program for controlling the UA-100's internal mixer and effects is functional far from complete. There are still some quirks to the order of SYSEX messages that the UA-100 needs and you may need to click on selection boxes more than once to get the commands to work. The UA-100 has an extensive collection of audio effects and while capability for turning them on has been provided, only a handful of the dialogs needed to adjust the parameters for each effect have been written. I have always disliked the layout of the UA-100 mixer that is provided for Windows/Mac and I am striving to eliminate some unnecessary features (such as sub-masters).
Version 2002.07.23:
Used 1 frame per write URB - 32 frame sequence with 128 URB buffer - to reduce latency
Added handling for sample rates below 44,100, mono and 8-bit resolution
Ring buffer of URBs - URB completion callback submits the next URB
Foreground process just fills free URB transfer buffersVersion 2002.07.19:
Used 1 frame per write URB - 32 frame sequence
Added handling for sample rates below 44,100, mono and 8-bit resolutionVersion 2002.01.31:
Fixed bug with MIDI nonblocking read skipping events (read leaves URB submitted between read() calls)
Converted all parameters to combo boxes for more accurate setting
Fixed compilation problems?Version 2001.11.28:
Removed closing save prompt
Record select also resends line/mic mode
Fixed load of insertion effect
Effect path change resets effect so effect type/parameters will be sent to new path
Parameters: Guitar Multi I, Clean Guitar Multi I, Reverb insertion
Incorporated Naoki Takehiro's SMP patch with initialization of read and write spin locks
Added support for ioctl SNDCTL_DSP_SPEED - only supports 44,100
Changed MIDI read to nonblockingVersion 2001.07.01: Documentation corrections, corrected bug handling sysex input and output, release to Source Forge.
Version 2001.06.24: Initial public release
Download the USBUA100 source tarball from the link in Version History and untar/unzip it. This will copy the source and precompiled module into a "usbua100" directory:
$ tar -zxvf usbua100-2001.06.24.tar.gz $ cd usbua100
USBUA100 is available as source code only and compilation is not slow or difficult. USBUA100 should compile with no problem on Red Hat 7.2 standard installations and probably will compile on other distributions with little or no tweaking of the makefile. Kernels before 2.2 do not have USB support and hence, USBUA100 will not compile or work on kernels before RH 7.0. Compilation of USBUA100MIX will require a version of QT compatible with QT version 2.3 - again, usually shipped with most distributions.
AS SUPERUSER, perform a simple make and make install:
$ make $ make install
USBUA100 requires registration functions that are in the standard kernel sound modules. Unfortunately, these modules are loaded on demand and you will have to manually load them before loading the USBUA100 module:
$ /sbin/insmod soundcore $ /sbin/insmod usbua100
To get these modules to load at boot time, you will need to manually edit your "/etc/rc.d/rc.local" boot script and add an insmod line (without the dollar sign, of course) at the end of the script.
No changes to modules.conf are suggested. Normally, sound cards are configured to load their modules on demand when the device is accessed. Therefore, if you have a native soundcard or internal sound chip that you want to take precedence over USBUA100 (e.g. soundcard uses /dev/dsp and USBUA100 uses /dev/dsp1), you must explicitly load that module BEFORE loading USBUA100. For example: in my laptop, the maestro module handles the Maestro sound chip. Therefore, the end of my rc.local file looks like this:
/sbin/insmod soundcore /sbin/insmod maestro /sbin/insmod usbua100
If you haven't already, you should plug your UA-100 (or UM-1 or SC-8850) into the USB port of your computer and turn it on. You can verify that the USB subsystem has successfully recognized both USBUA100 and your hardware by typing:
$ cat /proc/bus/usb/devices
You will get some rather cryptic output giving information about the USB devices connected to your computer. At the end of the list should be something that looks like this
C:* #Ifs= 3 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=00 Driver=usbua100 E: Ad=01(O) Atr=01(Isoc) MxPS= 0 Ivl= 1ms I: If#= 0 Alt= 1 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=00 Driver=usbua100 E: Ad=01(O) Atr=01(Isoc) MxPS= 360 Ivl= 1ms I: If#= 1 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=00 Driver=usbua100 E: Ad=81(I) Atr=01(Isoc) MxPS= 0 Ivl= 1ms I: If#= 1 Alt= 1 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=00 Driver=usbua100 E: Ad=81(I) Atr=01(Isoc) MxPS= 184 Ivl= 1ms I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=00 Driver=usbua100 E: Ad=02(O) Atr=02(Bulk) MxPS= 32 Ivl= 1ms E: Ad=82(I) Atr=02(Bulk) MxPS= 32 Ivl= 1ms I: If#= 2 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=00 Driver=usbua100 E: Ad=02(O) Atr=02(Bulk) MxPS= 32 Ivl= 1ms E: Ad=82(I) Atr=03(Int.) MxPS= 32 Ivl= 2ms
This is a listing of the "endpoints" used for reading and writing to the USBUA100. The important part is "Driver=usbua100". If it reads "Driver=(none)", the USB subsystem has not recognized USBUA100. If it reads "Driver=midi", that is fine because it is connected to the USB-MIDI class driver. If you can't find anything like these lines in the listing, the USB subsystem has not detected your hardware and you should verify that your cable is connected correctly and the device is on.
Assuming that this listing is good, you can move on to trying some output.
USBUA100 has MIDI handling capability for the UA-100. However, if you dissatisfied with MIDI handling for some reason, there is an existing GPL project for a USB MIDI class driver, appropriately enough named USB-MIDI. Most of the bugs seem to be worked out of USB-MIDI and it supports a broad range of USB MIDI devices besides the UA-100.
Download the most recent USB-MIDI tarball listed on the USB-MIDI kernel module page. You must use version 20010707 or greater to have the correct autoprobing for the UA-100. Uncompress and make, but DO NOT make install.
$ tar -zxvf usb*.tar.gz $ cd usbmidi* $ make
The make install option is broken, so you will need to manually copy the module into the module directory and load it.
$ cp usb-midi.o /lib/modules/*/kernel/drivers/usb $ /sbin/modprobe usb-midi
As mentioned in the Installation section, you will need to add lines to your "/etc/rc.d/rc.local" boot script. Specifically, you will want to insmod usb-midi before usbua100 so usb-midi handles MIDI connections rather than usbua100
/sbin/insmod soundcore /sbin/insmod maestro /sbin/insmod usb-midi /sbin/insmod usbua100
Verification of correct loading is given in the Testing section following the USBUA100 installation process.
USBUA100 uses the OSS module registration functions which dynamically assign device files at the time the USB device is connected to the computer. As such, the exact name of the device files used to access your UA-100 will vary depending on the number of devices already connected at the time you connect and turn on your USB device.
Unfortunately, since the Linux sound system is in flux, /dev/sndconfig is apparently no longer a part of the standard Linux distribution. USBUA100 lists it's operational and error messages to the /var/log/messages system file. AS SUPERUSER, you can open this file and somewhere near the end should be messages from USBUA100 indicating which device files are being used. The listings should look something like this:
Jun 23 16:43:10: USBUA100: Linux USB Driver for Roland MIDI interfaces v2001.06.23 Jun 23 16:43:10: USBA100: Registered UA-100 Out as /dev/dsp1 - interface 0, endpoint 1 Jun 23 16:43:10: USBA100: Registered UA-100 In as /dev/dsp1 - interface 1, endpoint 129 Jun 23 16:43:10: USBA100: Registered UA-100 A as /dev/midi00 Jun 23 16:43:10: USBA100: Registered UA-100 B as /dev/midi01 Jun 23 16:43:10: USBA100: Registered UA-100 CTRL as /dev/midi02
This indicates that the audio device is /dev/dsp1 and the three MIDI ports (two in/out ports and one port for UA-100 control messages) are /dev/midi00, /dev/midi01 and /dev/midi02.
MIDI input and output is supported through the standard Linux /dev/midi files. As discussed above, the exact names (e.g. /dev/midi02, /dev/midi01) are dynamically assigned and system dependent.
To use MIDI output, you must, of course, have some kind of MIDI sound device connected to the MIDI output ports of the UA-100 or UM-1. The SC-8850 is a MIDI sound module that generates it's own sound.
If you do not have a MIDI player that will use the raw MIDI files, you can test your setup using the notemidiplay command line program provided in my NOTEMIDI module package. You can use any type 0 MIDI file (.mid) on your system, or use the the aquarium.mid (from Saint-Saens Carnival of the Animals) included in the NOTEMIDI tarball. As detailed above, if you have existing MIDI devices on your system, /dev/midi00 may be /dev/midi01 or higher:
$ notemidiplay aquarium.mid /dev/midi00
Note that notemidiplay is an extremely simple player that only supports type 0 MIDI files (which have a constant stream of MIDI messages in one "track"). Attempts to play type 1 or type 2 files will result in meaningful but fatal error messages.
Digital audio input and output is supported through a standard Linux /dev/dsp files. As discussed above, the exact name (e.g. /dev/dsp, /dev/dsp1) is dynamically assigned and system dependent.
To test audio output, you need a .wav file. If you do not have one under Linux or on your Windows partition, you can "rip" one from a CD using the cdda2wav program that ships with most Linux distributions. Insert a CD in your computer's CD-ROM drive and type the following. If you want to use something other than track #1, change the number after the -t option. You can also change "audio" to any file name you want.
$ cdda2wav -D /dev/cdrom -t 1 audio
Linux has a very flexible command line sound program called SOX. It has a rather cumbersome syntax, so there is a "play" script that can be invoked from the command line:
$ play -d /dev/dsp1 audio.wav
/dev/dsp1 is an alternate sound device file. The main digital audio device is /dev/dsp. If you have no sound card on your computer, USBUA100 may attach to /dev/dsp instead of dsp1. If you have multiple sound devices, it may attach to /dev.dsp2 or higher.
USBUA100 will work with XMMS (the X multimedia system) a player similar to winamp that comes with most standard Linux distributions. However, you will need to set the configuration. Click the right mouse button on the player in the area just above the control buttons and chose "Options->Preferences". For the output plugin, choose "OSS Driver". Chose the button to "Cconfigure" the driver. Assuming there is an existing audio card on your system using /dev/dsp and USBUA100 is using /dev/dsp1, under the "Devices" tab, chose "use alternate device" and type in /dev/dsp1. OK everything and try playing a .wav file.
The USBUA100 tarball contains a QT-based graphical mixer interface for controlling the internal mixer and effects of the UA-100. This will not, of course, work with the UM-1 or SC-8850.
The executable is called "usbua100mix" and can be started by typing that on an X-Windows console.
The mixer assumes some familiarity with the audio paths of the UA-100. There are five channels:
Note that there is no recording level control. I have found that in practice, recording level should be set by the analog controls to maximize digital headroom on recorded tracks.
For each channel:
The UA-100 has the capability for either ONE very complex effect (FULL EFFECT) that can be applied to any input or assigned to one of the two system effects busses, OR THREE "compact" effects: an insertion effect that can be applied to one input and two system effects (a chorus and a reverb or delay) that are applied to the system effects busses. These are selected with the four buttons on the right of the USBUA100MIX dialog. Note that if a FULL effect is selected, the INSERTION and SYSTEM effects are turned off...and vice-versa.
The type of effect is selected in a combo box at the top of the appropriate dialog. THE PARAMETERS FOR MOST EFFECTS HAVE NOT BEEN IMPLEMENTED YET. When you select an effect, the default settings are applied for now. For the few effects with parameters, the meaning of a slider can be discerned by holding the mouse pointer over a slider...a tooltip bubble will pop up describing the purpose of the slider. This was chosen over short cryptic names to preserve space.
FULL effects can be applied to any input or to one of the two system effects busses. INSERTION effects can be applied to any input. The selection of where the effect is placed is a combo box next to the effect type combo box.
USBUA100MIX has the capability to save and load settings to/from the same .uax files that the MS-Windows version of the the mixer uses. This capability has not been tested extensively and is probably buggy.
USBUA100MIX works by sending system exclusive (SYSEX) messages to the UA-100 control port. The code (around line 302) contains a hard-coded string that defines this device as /dev/midi02 - which will be the device name if USBUA100 is used on a system where the UA-100 is the only MIDI device. You can change the MIDI device in the File->Midi Port dropdown menu when the program is running, although this change does not persist between invocations of the program. For a permanent change, you must alter the line in the source code
The UA-100 ships with a CD containing some awkwardly written HTML reference materials that are installed with the MS-Windows software in "/Program Files/Roland". If you have the UA-100 software installed on your Windows partition, you may want to consult this material for further details. You can also copy it off of the CD-ROM into a Linux directory.
During testing, I wrote a very simple command line program for sending SYSEX messages to the UA-100. Although it is superceded by the vastly superior USBUA100MIX graphical mixer, it is included in case you want to write scripts to control the UA-100. The syntax:
usbua100sysex <midi device name> <address> <data bytes>...
For example:
usbua100sysex /dev/midi02 00405003 64
This changes parameter address 00405003 (master volume level) to 64 (50%)
Although the device descriptor for the UA-100 indicates that it is vendor specific, the MIDI implementation appears to comply with the official MIDI Device Class Definition. The MIDI endpoints of the UA-100 as well as the UM-1 and SC-8850 can also be accessed with USB-MIDI, the semi-official Linux USB MIDI class driver. However, I am not sure if you can use the class driver (yet) to access more than one of the MIDI ports (called Cable ID in the class driver), thus making it impossible to use both a MIDI output port and the UA-100 system control port for mixer control sysex MIDI messages. For that reason (and for convenience) MIDI endpoint handling is provided in USBUA100.
I am not quite as certain about whether the audio implementation complies with the audio class specification. I am new to USB programming and I basically figured out how to make this work with trial and error (and perhaps some divine intervention).
I did make a request to the people at Edirol (the American distributor of Roland's desktop music products) for specs. Their response was that no Linux drivers were currently planned and that it would be difficult for them to provide me with enough complete information to develop a driver.
MIDI data is sent and received to/from the bulk transfer endpoints (interface #2, alternate 0, endpoints 0x02 and 0x82) in 4-byte chunks with a preceeding "burst" byte that indicates the destination/source port for following 3 bytes of data. All MIDI messages under status 0xf0 (SYSEX) are two or three bytes long and fit in a single 4-byte chunk. Messages over status byte 0xf0 are split into multiple consecutive chunks with the appropriate burst bytes specified below.
For MIDI sends, the upper 4 bits of the "burst" byte are the source/destination port (described below). The lower 4 bits are either the upper 4 bits of the MIDI message status byte, 4 for the beginning or middle of a SYSEX message, 6 if there are two bytes in the last SYSEX chunk, and 5 if there is one byte in the last chunk of a SYSEX message. For MIDI receives the protocol is basically the same with the upper four bits representing the input port.
Example: 19 90 30 70 is a note on message sent to port 2.
For UA-100 sends, the "burst byte" is 0x00 for MIDI OUT 1, 0x10 for MIDI OUT 2 and 0x20 for the UA-100 control port which receives SYSEX messages to change the internal mixer and effect settings. MIDI receives are basically the same: 0x00 for MIDI IN 1 and 0x00 for MIDI IN 2.
For the UM-1, there is only one input and output port, so the upper 4 bits of the "burst byte" are always 0x00.
For the SC-8850, the "burst byte" indicates which of the four "parts" (i.e. 16-channel banks) should receive the MIDI output: 0x00 for Part A, 0x10 for Part B, 0x20 for Part C and 0x30 for Part D. However, unlike the other devices, for MIDI input: 0x40 for MIDI IN 1 and 0x50 for MIDI IN 2
Chunks smaller than 4 bytes (such as two-byte program change messages) are padded with trailing NULLs to a 4-byte length.
I desperately attempted to find a way to provide a way of registering the MIDI ports so they could be used by /dev/sequencer, but there are apparently some interrupts used by /dev/sequencer that caused the USB subsystem to issue some cryptic interrupt messages.
Audio protocol is a bit more difficult. I suspect that there are control/sync endpoints for changing the input format, but given my limited time and knowledge I simply figured out how to make the default (and possibly only) mode of operation work.
Audio data is written using isosynchronous transfers to interface #0, address #1, alternate #1 for output and interface #1, address #81, alternate #1 for input. I initially used a scheme with 10 frames per URB and start_frame time handling, but Markus figured out the strange URB sequence. There is a pattern of 32 one-frame URBs: two 360 byte URBS, followed by 14 352-byte URBs, one 360 byte URB and then 15 more 352-byte URBs. Don't ask me why, I just work here. With this pattern, the URBs can be sent with ASAP URB timing (e.g. urb->transfer_flags = USB_ISO_ASAP) There are still sporadic output dropouts and more work on timing may be in order by someone more adept at USB handling than me. This also may be endemic to USB audio and the reason professionals don't use it.
USB_ISO_ASAP transfer handling has always been used for audio input. However, each packet must be sent at full length (184 bytes) or you will get a nasty kernel message in /var/log/messages: "usb-uhci.c: interrupt, status 2, frame# xxx". The "actual_length" field of each packets indicates the (variable) number of bytes returned in each packet.
USBUA100 uses a "ring buffer" of 128 URBs. As each URB finishes and calls the completion callback function, that function submits the next unsubmitted URB. Initially, 64 URBs are submitted when the device is opened, meaning at least 63 URBs are always submitted and waiting for the UA-100. While this has the effect of making those 64 URBs a buffer queue that increases latency, it is necessary to prevent dropouts. There is something about my particular system (Toshiba 2755DVD) that blocks interrupts during access from the CD-ROM drive. Since I use the UA-100 to play audio CDs through a player that reads audio data from the CD-ROM, this buffering is necessary. This is not a problem with reading from the hard-drive or from memory and you might consider reducing this number (#define USBUA100_AUDIO_INITIAL_SUBMIT) if you want reduced latency.
UA-100 interleaves 16-bit/44Khz PCM samples for the two output devices: L1, R1, L2, R2. If input is stereo, USBUA100 sends the data only to output device WAVE 1. If input is mono, USBUA100 sends the data to both channels of WAVE 1. Since USBUA100 sends URBs on demand, rather than continuously with a circular buffer as in the Linux audio class driver, it was not possible to create two separate Linux devices for wave 1 and wave 2.
References:
Audio Device Class Definition
Audio Data Formats Definition
MIDI Device Class Definition
Intel USB Documentation Page
A listing of the UA-100 SYSEX messages (derived from Roland's documentation) is given below:
Data Transmission F0: Start SysEx 41: Manufacturer (Roland) 10: Device ID 00: Model ID 1 11: Model ID 2 12: Command (Transmit data) aa: Address aa aa: aa: dd: Data dd: ck: checksum = 128 - ((sum of address & data bytes) & 0x3f); f7: end of SysEx Examples: F0 41 10 00 11 12 00 40 02 00 01 00 3D F7 (select Stereo-EQ as Mic2 insertion effect) f0 41 10 00 11 12 00 40 50 03 64 09 f7 (master level of 64) In URB buffer, the message is split into 3 byte chunks with a 24h is placed before every chunk except for a 25h before the final chunk. 24 f0 41 10 24 00 11 12 24 00 40 02 24 00 01 00 25 f7 Note that for messages with multiple data bytes (length > 1), the first data byte (usually the significant one) comes first. ------------------------------------------------------------------------ 00 40 00 00 01 PC Mode (VT Effect Mode) - sent by UA-100? 00 40 00 00 03 PC Mode (Compact Effect Mode) 00 40 00 00 04 PC Mode (Full Effect Mode) 00 40 00 00 05 VT Mode 00 40 00 00 06 Vocal Mode 00 40 00 00 07 Guitar Mode 00 40 00 00 08 GAME Mode 00 40 00 00 09 BYPASS Mode 00 40 00 01 0x Copyright (0 off, 1 on) n = 1 (line, mic1, mic1+2), 2 (mic2), 3 (wave1), 4 (wave2), 5 (sys effect 1), 6 (sys effect 2) 00 40 0n 00 xx 00 Effect type (listed below) 00 40 0n 03 xx Effect parameter 1 00 40 0n 04 xx Effect parameter 2 00 40 0n 05 xx Effect parameter 3 00 40 0n 06 xx Effect parameter 4 00 40 0n 07 xx Effect parameter 5 00 40 0n 08 xx Effect parameter 6 00 40 0n 09 xx Effect parameter 7 00 40 0n 0A xx Effect parameter 8 00 40 0n 0B xx Effect parameter 9 00 40 0n 0C xx Effect parameter 10 00 40 0n 0D xx Effect parameter 11 00 40 0n 0E xx Effect parameter 12 00 40 0n 0F xx Effect parameter 13 00 40 0n 10 xx Effect parameter 14 00 40 0n 11 xx Effect parameter 15 00 40 0n 12 xx Effect parameter 16 00 40 0n 13 xx Effect parameter 17 00 40 0n 14 xx Effect parameter 18 00 40 0n 15 xx Effect parameter 19 00 40 0n 16 xx Effect parameter 20 00 40 0n 17 xx Effect parameter 21 00 40 0n 18 xx Effect parameter 22 00 40 0n 19 xx Effect parameter 23 00 40 0n 1A xx Effect parameter 24 00 40 0n 1B xx Effect parameter 25 00 40 0n 1C xx Effect parameter 26 00 40 0n 1D xx Effect parameter 27 00 40 0n 1E xx Effect parameter 28 00 40 0n 1F xx Effect parameter 29 00 40 0n 20 xx Effect parameter 30 00 40 0n 21 xx Effect parameter 31 00 40 0n 22 xx Effect parameter 32 00 40 0n 23 xx Effect parameter 33 00 40 0n 24 xx Effect parameter 34 00 40 0n 25 xx Effect parameter 35 00 40 0n 26 xx Effect parameter 36 00 40 0n 27 xx Effect parameter 37 00 40 0n 28 xx Effect parameter 38 00 40 0n 29 xx Effect parameter 39 00 40 0n 2A xx Effect parameter 40 00 40 10 00 00 Mic input mode 00 40 10 00 01 Line input mode 00 40 10 00 02 MIC1+MIC2 Mode (not in VT mode) 00 40 10 01 xx Input pan 1 (0 - 40 - 7f) 00 40 10 02 xx Input pan 2 (0 - 40 - 7f) 00 40 10 03 0x Monitor (0 off, 1 on) n = 1 (line, mic1, mic1+2), 2 (mic2), 3 (wave1), 4 (wave2), 5 (sys effect 1), 6 (sys effect 2) 00 40 1n 00 xx Effect 1 send level (full/compact effect mode) 00 40 1n 02 xx Effect 2 send level (full/compact effect mode) 00 40 1n 04 xx Submaster send level (not in VT mode) 00 40 1n 05 xx Fader level (not in VT mode) 00 40 1n 06 0x Mute (0 off, 1 on) 00 40 1n 07 0x Solo (0 off, 1 on) 00 40 40 00 01 VT effect mode 00 40 40 00 03 Compact effect mode (1 insertion + 2 system effects) 00 40 40 00 04 Full effect mode (1 effect) 00 40 40 01 0x Line/Mic1/Mic1+2 insertion effect on/off (0 off, 1 on) 00 40 40 02 0x Mic2 insertion effect on/off (0 off, 1 on) 00 40 40 03 0x Wave1 insertion effect on/off (0 off, 1 on) 00 40 40 04 0x Wave2 insertion effect on/off (0 off, 1 on) 00 40 40 05 0x System effect 1 on/off (0 off, 1 on) 00 40 40 06 0x System effect 2 on/off (0 off, 1 on) 00 40 40 07 xx Effect 1 master return 00 40 40 08 xx Effect 1 submaster return 00 40 40 09 xx Effect 2 master return 00 40 40 0A xx Effect 2 submaster return 00 40 40 0B 0x Vocal Transform 1 receive channel (0 - F) 00 40 40 0C 0x Vocal Transform 1 note enabled (0 off, 1 on) 00 40 40 0D 0x Vocal Transform 1 bend enabled (0 off, 1 on) 00 40 40 0E 0x Vocal Transform 2 receive channel (0 - F) 00 40 40 0F 0x Vocal Transform 2 note enabled (0 off, 1 on) 00 40 40 10 0x Vocal Transform 2 bend enabled (0 off, 1 on) 00 40 50 00 0x Record source (Mixer: 0 line/mic, 1 mic2, 2 wave1, 3 wave2, 4-7 ch 1-4, 8 submaster, 9 master) (VT: 0 line/mic, 1 mic3, 2 wave1, 3 wave2, 4 VT-out, 5 master) 00 40 50 01 0x Output (see record source) 00 40 50 02 xx Recording level 00 40 50 03 xx Master level n = 0 (Voice Transformer), 1 (Vocal), 2 (Guitar), 3 (Game) (NOT FOR PC MODE) 00 40 6n 00 xx Preset effect parameter 1 (0 - 39) 00 40 6n 01 xx Preset effect parameter 2 (0 - 39) 00 40 6n 02 xx Preset effect parameter 3 (0 - 39) 00 40 6n 03 xx Preset effect parameter 4 (0 - 39) 00 40 6n 04 xx Preset effect default Value 1 (0 - 127) 00 40 6n 05 xx Preset effect default Value 2 (0 - 127) 00 40 6n 06 xx Preset effect default Value 3 (0 - 127) 00 40 6n 07 xx Preset effect default Value 4 (0 - 127) 00 40 6n 08 xx Preset effect default Value 5 (0 - 127) 00 40 6n 09 xx Preset effect default Value 6 (0 - 127) 00 40 6n 0A xx Preset effect default Value 7 (0 - 127) 00 40 6n 0B xx Preset effect default Value 8 (0 - 127) 00 40 6n 0C xx Preset effect default Value 9 (0 - 127) 00 40 6n 0D xx Preset effect default Value 10 (0 - 127) 00 40 6n 0E xx Preset effect default Value 11 (0 - 127) 00 40 6n 0F xx Preset effect default Value 12 (0 - 127) 00 40 6n 10 xx Preset effect default Value 13 (0 - 127) 00 40 6n 11 xx Preset effect default Value 14 (0 - 127) 00 40 6n 12 xx Preset effect default Value 15 (0 - 127) 00 40 6n 13 xx Preset effect default Value 16 (0 - 127) 00 40 6n 14 xx Preset effect default Value 17 (0 - 127) 00 40 6n 15 xx Preset effect default Value 18 (0 - 127) 00 40 6n 16 xx Preset effect default Value 19 (0 - 127) 00 40 6n 17 xx Preset effect default Value 20 (0 - 127) 00 40 6n 18 xx Preset effect default Value 21 (0 - 127) 00 40 6n 19 xx Preset effect default Value 22 (0 - 127) 00 40 6n 1A xx Preset effect default Value 23 (0 - 127) 00 40 6n 1B xx Preset effect default Value 24 (0 - 127) 00 40 6n 1C xx Preset effect default Value 25 (0 - 127) 00 40 6n 1D xx Preset effect default Value 26 (0 - 127) 00 40 6n 1E xx Preset effect default Value 27 (0 - 127) 00 40 6n 1F xx Preset effect default Value 28 (0 - 127) 00 40 6n 20 xx Preset effect default Value 29 (0 - 127) 00 40 6n 21 xx Preset effect default Value 30 (0 - 127) 00 40 6n 22 xx Preset effect default Value 31 (0 - 127) 00 40 6n 23 xx Preset effect default Value 32 (0 - 127) 00 40 6n 24 xx Preset effect default Value 33 (0 - 127) 00 40 6n 25 xx Preset effect default Value 34 (0 - 127) 00 40 6n 26 xx Preset effect default Value 35 (0 - 127) 00 40 6n 27 xx Preset effect default Value 36 (0 - 127) 00 40 6n 28 xx Preset effect default Value 37 (0 - 127) 00 40 6n 29 xx Preset effect default Value 38 (0 - 127) 00 40 6n 2A xx Preset effect default Value 39 (0 - 127) 00 40 6n 2B xx Preset effect default Value 40 (0 - 127) 00 40 60 7F 00 Preset effect parameter write --------------------------------------------------------- System Effect 1 0021: Delay 0022: Chorus System Effect 2 0031: Delay 0032: Reverb Full Effects 0011: High Quality Reverb 0012: Mic Simulator 0013: Vocoder 0014: Vocal Multi 0016: Game with 3D Reverb 0300: Rotary Multi (same parameters as insertion #47) 0400: Guitar Multi 1 (same parameters as insertion #48) 0401: Guitar Multi 2 (same parameters as insertion #49) 0402: Guitar Multi 3 (same parameters as insertion #50) 0403: Clean Guitar Multi 1 (same parameters as insertion #51) 0404: Clean Guitar Multi 2 (same parameters as insertion #52) 0405: Bass Multi (same parameters as insertion #53) 0406: Electric Piano Multi (same parameters as insertion #54) 0500: Keyboard Multi ( (same parameters as insertion #55) Insertion Effects 0000: (00) Noise Suppressor 0100: (01) Stereo Equalizer 0101: (02) Spectrum 0102: (03) Enhancer 0103: (04) Humanizer 0110: (05) Overdrive 0111: (06) Distortion 0120: (07) Phaser 0121: (08) Auto Wah 0122: (09) Rotary 0123: (10) Stereo Flanger 0124: (11) Step Flanger 0125: (12) Tremolo 0126: (13) Auto Pan 0130: (14) Compressor 0131: (15) Limiter 0140: (16) Hexa Chorus 0141: (17) Tremolo Chorus 0142: (18) Stereo Chorus 0143: (19) Space D 0144: (20) 3D Chorus 0150: (21) Stereo Delay 0151: (22) Modulation Delay 0152: (23) 3 Tap Delay 0153: (24) 4 Tap Delay 0154: (25) Time Control Delay 0155: (26) Reverb 0156: (27) Gate Reverb 0157: (28) 3D Delay 0160: (29) 2-voice Pitch Shifter 0161: (30) Feedback Pitch Shifter 0170: (31) 3D Auto 0171: (32) 3D Manual 0172: (33) Lo-Fi 1 0173: (34) Lo-Fi 2 0200: (35) Overdrive/Chorus 0201: (36) Overdrive/Flanger 0202: (37) Overdrive/Delay 0203: (38) Distortion/Chorus 0204: (39) Distortion/Flanger 0205: (40) Distortion/Delay 0206: (41) Enhancer/Chorus 0207: (42) Enhancer/Flanger 0208: (43) Enhancer/Delay 0209: (44) Chorus/Delay 020a: (45) Flanger/Delay 020b: (46) Chorus/Flanger 0300: (47) Rotary Multi 0400: (48) Guitar Multi1 0401: (49) Guitar Multi2 0402: (50) Guitar Multi3 0403: (51) Clean Guitar Multi1 0404: (52) Clean Guitar Multi2 0405: (53) Bass Multi 0406: (54) E.Piano Multi 0500: (55) Keyboard Multi 1100: (56) Chorus/Delay 1101: (57) Flanger/Delay 1102: (58) Chorus/Flanger 1103: (59) Overdrive/Distortion1,2 1104: (60) Overdrive/Distortion/Rotary 1105: (61) Overdrive/Distortion/Phaser 1106: (62) Overdrive/Distortion/Auto-wah 1107: (63) Phaser/Rotary 1108: (64) Phaser/Auto-wah