Author: Michael Minn <michael@michaelminn.com>
July 1, 2001
2.1 USB-MIDI
2.2 Module Compilation & Installation
2.3 Boot-time Load
2.4 Testing
3.1 Dynamic Name Assignment
3.2 /dev/midi
3.3 /dev/dsp
4.1 usbua100mix
4.2 usbua100sysex
4.3 lsndlist
4.4 lsndplaymidi
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.
USBUA100 IS ALPHA-LEVEL CODE: While it does appear 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 stock Red Hat 7.1 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 no sample rate or resolution conversion capability and only provides capability for handling 44.1Khz 1, 2 and 4 channel 16-bit PCM sample formats (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 2001.07.01: Documentation corrections, corrected bug handling sysex input and output, release to Source Forge.
Version 2001.06.24: Initial public release
There is an existing GPL project for a USB MIDI class driver, appropriately enough named USB-MIDI. The code is seems to work fine, but if you don't install this module, USBUA100 has MIDI handling for the UA-100 and you can move on to the Module Compilation and Installation section. Ultimately, MIDI handling will be removed from USBUA100 once USB-MIDI is stable, so you might as well give this a try.
Download the most recent USB-MIDI tarball listed on the USB-MIDI kernel module page. Uncompress and make, but DO NOT make install.
$ tar -zxvf usb*.tar.gz $ cd usbmidi* $ make
You should verify that your USB-MIDI has the most current hardcoded descriptors for the UA-100. Open the usb-midi.h file and verify that EXACTLY the following lines exist somewhere in the code:
{ /* Roland UA-100 */ "Roland UA-100", USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_UA100G, 2, -1, { { 0x82, 7 }, {-1, -1} }, /** cables 0,1 and 2 for SYSEX **/ { { 0x02, 7 }, {-1, -1} }, },
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
Verification of correct loading is given in the Testing section following the USBUA100 installation process.
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.0 and 7.1 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 earlier kernels. 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 the two insmod lines (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/modprobe usb-midi /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 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. lsndlist is a simple command line program included as part of USBUA100 installation that lists current Linux sound device files. Type "lsndlist" at a command line prompt and you should get a listing of all sound devices on your system.
Alternatively, 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.
The easiest program to test MIDI with is the lsndplaymidi program that is installed as part of the USBUA100 installation. You can use any MIDI file (.mid) on your system, or use the the aquarium.mid (from Saint-Saens Carnival of the Animals) included in the USBUA100 tarball. As detailed above, if you have existing MIDI devices on your system, /dev/midi00 may be /dev/midi01 or higher:
$ lsndplaymidi aquarium.mid /dev/midi00
Note that lsndplaymidi 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.
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%)
Unfortunately, since the old Linux sound system (OSS) interface is being superceded by a new one, the standard technique for listing sound capability (cat /dev/sndstat) no longer works. lsndlist is a command-line utility for listing the status of standard Linux audio device files.
To permit query of the names of USBUA100 MIDI devices, USBUA100 and lsndlist implement the SNDCTL_MIDI_INFO ioctl which is normally only used with /dev/sequencer.
lsndlist is also part of the LSND suite of simple command line programs.
I was surprised to find that there is no commonly available Linux command line MIDI player available other than PLAYMIDI. PLAYMIDI cannot be used with USBUA100 because it requires a /dev/sequencer implementation to find device files. Therefore, lsndplaymidi is provided as a simple command line MIDI player. To ease implementation, only Type 0 MIDI files are supported. I assume that most sequencers have the capability for export in this format.
lsndplaymidi is also part of the LSND suite of simple command line programs.
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 a isosynchronous transfers to interface #0, address #1, alternate #1 for output and interface #1, address #81, alternate #1 for input. I initially attempted to use ASAP URB timing (e.g. urb->transfer_flags = USB_ISO_ASAP) therefore requiring no tracking of frame times, but the input had dropouts approximately every two seconds. Therefore, I had to implement start_frame handling using the usb_get_current_frame_number() function. USB_ISO_ASAP transfer handling is used for audio input. There are still sporadic output dropouts and more work on timing may be in order by someone more adept at USB handling than me.
To time isosynchronous writes correctly, each URB contain 10 isosynchronous packets totaling 441 samples apiece, i.e. 10ms per URB at 44.1Khz sample rate. This works out to 3528 bytes for write URBs with 8 byte samples (two 16-bit stereo channels) as nine packets of 352 bytes and one packet of 360 bytes. For Reads, 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.
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