Midi-Implementation
Midi-Implementation
06
Date: 14th Apr 2001, Update in Progress 2nd October 2002
Firmware-Version overview:
Firmware < 1.50: Interface V 0.00
Firmware < 2.00: Interface V 1.00
Firmware >= 2.00: Interface V 1.02
Firmware >= 2.21: Interface V 1.03
Firmware >= 2.24: Interface V 1.04
Firmware >= 2.34: Interface V 1.05
Firmware >= 2.40: Interface V 1.06
Color-Legend:
Blue: Corrections to initial Release
Red: Future Extensions
Orange: Extensions to be implemented for V1.02
Green: New Extensions already implemented
SYSTEM EXCLUSIVE
Identity Request:
F0h 7Eh dv 06h 01h F7h
Command-Overview:
41h ‘A’ Register Application
43h ‘C’ Define LC Character
44h ‘D’ Dump
47h ‘G’ Request System Dump
49h ‘I’ Instrument-Editor
52h ‘R’ Request Data (V0.00 or V1.04+)
53h ‘S’ System Dump
59h ‘Y’ Switch Application (Used by USB-Driver)
79h ‘y’ System-Key (V1.03, Used by USB-Driver)
Use global mode 2 (slave) because the active mode not finished until now.
The descriptions of the control changes below belongs to this mode! To set this
mode send (i.e.): F0h 00h 01h 36h 2Ah 0Fh 44h 00h 00h 00h 40h F7h
‘SPr5' Pro-Five
'SPr2' Pro 52
'SWv2' Wave 2.V
'NiB4' Native Instruments B4
'SMdE' Model E
'NP2k' NI Premium Library SH-2K
'NMMo'NI Many Mood
'NPTo' NI Premium Library Three Osc
'NPMe' NI Premium Library Me2SalEM
‘Ex24' Emagic EXS 24 Extreme Sampler
'EEs1' Emagic ES 1 Synthesizer
'TMc1' TC-Works Mercury 1
'CEd8' Pulsar EDS8i
'CESy' Pulsar EZ Synth
'CInf' Pulsar Inferno
'CMSc' Pulsar MiniScope
'CBSy' Pulsar BlueSynth
'CVoc' Pulsar Vocoder
'Cknw' Pulsar U-Know 007
'PSbt' Reason Subtractor
'PDRx' Reason Dr. Rex
'PN19' Reason NN-19
'PRdr' Reason Redrum Mixer
'PVct' Pulsar Vectron
'COr2' Zarg Orion V2.0
'CDst' Zarg Dark Star
The following specifications are preliminary informations and should not yet be
used for implementations (currently they’re are not even implemented!).
Subpacket-Format:
Each subpacket contains a Type describing the kind of data encoded, a Width in Bytes of
each Item, an Offset to the first Item transmitted and a Count of transmitted Items.
Each of these Counts are encoded as 6-Bit-Values stored in the low 6 Bit of a Byte. If Bit 6 is
set, then the current Byte encodes the most significant 6 Bits and the next Byte(s) the less
significant Bits. So an arbitrary Bit-Length is encodable and does not impact efficiency on
low numbers.
The decoding can be implemented using a similiar Code-Fragment:
int Value;
byte MidiByte;
Value = 0;
do {
MidiByte = GetMidiByte();
Value = (Value * 64) + (MidiByte AND 0x3F);
}
while((MidiByte AND 0x40) != 0);
Type-Descriptors:
Fader Values 'F':
0x46 0x01 Offset Count <Value> ...
Offset 0..32, 32 = Master-Fader
Active-Modes: All 33 Faders are supported
Slave-Modes: Only Values 0..7,32 are supported
Display-Contents 'D':
0x44 0x00 FirstPosition 0x01 <String>
First Position contains the Line-Number in the bottom 4 Bits and the Display-Number
in Bits 4..7. So for SAC-2k this is the range 0x00..0x21
String is the Zero-Terminated String written to the given Display-Position. Any
Newline (0x0A) jumps to the next Line of the current Display, a Tab (0x09) jumps to
the next Display. A Carriage-Return (0x0D) clears the current Display.
Only available in Slave-Modes
Led-Encoding 'L':
0x4C 0x01 Offset Count <LedState>
LedState: This is a 4-Bit Blink-Pattern, these are some combinations:
0x00 Led stays off (LEDMODE_OFF)
0x03 Led Blinks (LEDMODE_BLINK)
0x06 Led Blinks with a different Phase (LEDMODE_BLINK2)
0x0C Led Blinks with another Phase (LEDMODE_BLINK3)
0x05 Led Blinks faster (LEDMODE_QBLINK)
0x02 Led Flashes (LEDMODE_FLASH)
0x07 Led Flashes inverted (LEDMODE_UNFLASH)
0x0F Led stays on (LEDMODE_ON)
The Led-Order is System-Dependant
Only available in Slave-Modes
[internal scratch
- Version-Number
- System-Dump depends on currently selected mode
=> All Active-Modes:
- Track-Names
- Mixer-Values
- Current Selections (Track)
=> Other Modes:
- Displays
- Fader&Encoder-Positions, Button States
internal scratch]
The SAC sends these Messages, when the corresponding Button changes.
The Parameter dr is encoded as follows:
00h Button Released
01h Button Depressed
02h Button Depressed with Shift held
On Reception these Messages control the corresponding Button LEDs (if available). Then the
Parameter dr is encoded as follows:
From Version 1.02 you can specify the Led-State as a 4-Bit sequence in Bits 0..3 when Bit 5
is set. The Led is off in the specific state when the Bit is cleared and on otherwise.
Some Examples (V1.02):
20h Led off
2Fh Led always on
2Ch Led Blink
25h Led fast Blink
2Ah Led fast Blink, alternate Phase
21h Led Flashing
Switches
Solo: Bxh dr 00 Note: x=system channel
Mute#1: Bxh dr 01
... ... (physical switch, not bank switched...)
Mute#8: Bxh dr 08
Select#1: Bxh dr 09
... ...
Select#8: Bxh dr 10h
Master-Select: Bxh dr 11h receiption of these commands will result
Ins./Send: Bxh dr 12h in the corresponding LED being turned on/off
Pan: Bxh dr 13h (LED on if dr=01, LED off if dr=00, LED blink if dr=02)
High: Bxh dr 14h
Send1: Bxh dr 15h
HiMid: Bxh dr 16h
Send2: Bxh dr 17h
LowMid: Bxh dr 18h
Send3: Bxh dr 19h
Low: Bxh dr 1Ah
Send4: Bxh dr 1Bh
Audio: Bxh dr 1Ch
Midi: Bxh dr 1Dh
Input: Bxh dr 1Eh
Inst.: Bxh dr 1Fh
Bus: Bxh dr 20h
Group: Bxh dr 21h
Bank#1-8: Bxh dr 22h
Bank#9-16: Bxh dr 23h
Bank#17-24: Bxh dr 24h
Bank#25-32: Bxh dr 25h
System: Bxh dr 26h
ChannelStripEQ: Bxh dr 27h
Insert/Sends: Bxh dr 28h
Dynamics: Bxh dr 29h
Midi: Bxh dr 2Ah
Instrument: Bxh dr 2Bh
Recall-Marker: Bxh dr 2Ch
Jump-To: Bxh dr 2Dh
Store-Marker: Bxh dr 2Eh
Jump-From: Bxh dr 2Fh
Scrub: Bxh dr 30h
Rewind: Bxh dr 31h
Forward: Bxh dr 32h
Stop: Bxh dr 33h
Play: Bxh dr 34h
Record: Bxh dr 35h
Num: Bxh dr 36h
Enter: Bxh dr 37h
Shift: Bxh dr 38h
Key#1: Bxh dr 39h
... ...
Key#10: Bxh dr 42h
Faders
Fader#1 MSB: Bxh 17h vv Note: vv = fader position (00..7Fh)
... ... (physical fader, not bank switched)
Fader#9 MSB: Bxh 1Fh vv
Encoder Control
Encoder#1: Bxh 53h vv
... ...
Encoder#12: Bxh 5Eh vv
Jog: Bxh 5Fh vv
Time Display
Digit: Bxh 67h nn Note: nn=digit number, 00=right most, auto-increment
Write Char: Bxh 68h nn Note: nn=bit mapped as shown below (time display
mode 3)
or ASCII character (mode 2, bit 4 ist decimal point)
with auto cursor increment
Write Dp: Bxh 69h nn Note: nn=bit mapped decimal point:
bit 0=right-most, bit 6=next to left-most (only mode 3)
Write Dp: Bxh 6Ah nn Note: bit 0 = left-most decimal point (only mode 3)
The "Digit" command is analogous to a cursor command. It simply points to the location
of the next digit which will receive a Write Char command. If 00, Write Char will write
to the right most digit. Subsequent Write Chars will automatically increment, that is,
the characters will appear in the display from right to left.
Displays
Cursor Display#1: Bxh 70h cp Note: cp = cursor position from 00 through 27h for the
top line,
40h through 67h for the bottom line.
Write Char: Bxh 71h cc cc = ASCII character with auto cursor increment.
Special: Bxh 72h nn nn=01 to clear display, nn=0Fh to turn on blinking
cursor,
nn=0Ch to turn off blinking cursor.
Cursor Display#2: Bxh 73h cp Note: see display #1
Write Char: Bxh 74h cc
Special: Bxh 75h nn
Use the Cursor command to move the cursor to an initial starting position. Thereafter, it
will auto increment. Note that the cursor itself may or may not be visible, depending upon
reception of the special LCD command.