0xF0 MIDI System exclusive message start
0x00 3 byte manufactors ID for TC-Helicon
0x01 ...
0x38 ...
<Device ID> System exclusive device ID (user parameter)
0x4E VoiceLive model ID
<Message ID> VoiceLive message type identifier
<Data> Start of message data
... Variable number of data bytes based on message type
0xF7 MIDI System exclusive message terminator
Data Packing (24-bit words to 4x7-bit bytes)
The idea of packing data is to take a 24-bit value (the normal width of
parameters in VoiceLive) and represent it as 4 bytes of 7 bits each.
This is done because SYSEX data can only be 7 bits in size. The first
three bytes hold (in sequence) bits 0-6, 7-13 and 14-20 of the 24-bit
value. The fourth byte hold bits 21-23 of the 24-bit value with zeros
in the remaining bits.
For example, If the value of a 24-bit parameter is 614 (0x266), it
would look like “0x66 0x04 0x00 0x00” in a SYSEX message.
Final 24-Bit Value:
vwxopqrs tuhijklm nabcdefg
Total = 00000000 00000010 01100110
= 0x0 0x2 0x66 = 0x000266
Page 1
TC-Helicon Vocal Technologies
www.tc-helicon.com
Page 2
Preset numbers
Preset numbers are represented in SYSEX messages as 2 bytes (combined
14 bit value). The first byte is the 7 least significant bits and the
second is the 7 most significant bits. Preset numbers are mapped as
follows:
Preset number zero references the current operating preset. Presets
numbered 1 through 99 (0x63) reference all stored presets. For
example, preset number 67 (0x43) would be translated into
bytes 0x43 (LSB) and 0x00 (MSB).
Checksum
Checksums are 1 byte holding the 7 least significant bits of the sum of
all bytes contributing to the checksum.
Example: If the byte values used in a checksum calculation were the
series 1,2,3,...,126 their sum total would be 8001. Dividing 8001 by
128 leaves a remainder of 65 which becomes the checksum byte.
Message data format
The format of data for each of the different SYSEX messages depends on
the type of message. Below are descriptions for each message type
explaining their specific data formatting requirements.
Preset Received Notification 0x34 (52)
Preset Data 0x20 (32)
Parameter Data 0x22 (34)
Shift Map Data 0x31 (49)
Song Data 0x12 (18)
Setup Data 0x13 (19)
VoiceLive Data Request messages
Request Preset – 0x45:
<Data> is 2 bytes representing the number of the preset requested. See
above for a description of preset number representation. The data
transmitted by VoiceLive upon receiving this message will be formatted
as a Preset Data message.
Request Paramter – 0x47:
<Data> is 2 bytes. The first byte defines the group to which the
parameter belongs and the second byte identifies the parameter within
the group. See the Parameter Grouping and Listing table for a complete
list of all groups and parameters. The data transmitted by VoiceLive
Page 2
TC-Helicon Vocal Technologies
www.tc-helicon.com
Page 3
upon receiving this message will be formatted as a Parameter Data
message (see below for complete description).
Request Shift Map – 0x51:
<Data> is 1 byte. The value of this byte is ignored. The data
transmitted by VoiceLive upon receiving this message will be formatted
as a Shift Map Data message.
Request Song Request – 0x14:
<Data> is 1 byte. It specifies the song number (1 is the first song, 0
is the current song). The data transmitted by VoiceLive upon receiving
this message will be formatted as a Song Data message.
Request Setup Data – 0x15:
<Data> is 1 byte. The value of this byte is ignored. The data
transmitted by VoiceLive upon receiving this message will be formatted
as a Setup Data message.
VoiceLive Data messages
Preset/Song Receive Notification – 0x34:
<Data> is 1 byte. Sometimes VoiceLive needs to reorganize its internal
preset bank after receiving a SYSEX preset. While this is happening,
VoiceLive has to ignore incoming preset SYSEX packages. If this
happens while you are dumping several presets to the unit, you might
lose a preset in transmission without realizing it. This situation can
be avoided by waiting for VoiceLive to send this message indicating
that the preset was successfully stored before attempting to send the
next.
Alternatively, if you plan to dump several or all 99 presets to the
unit and do not have the ability to wait for this message between
sends, simply clear the user preset bank (restore all factory presets)
before initiating the batch send. Doing so will save VoiceLive from
having to reorganize midstream, allowing for all 99 presets to be
dumped successfully.
Preset Data – 0x20:
Note: VoiceLive is capable of importing VoiceWorks presets
automatically. Note that VoiceLive presets are not backward compatible
with VoiceWorks.
<Data> is 396 bytes organized as follows (in sequence):
2 bytes Preset number (see above)
12 bytes Preset name (as ASCII characters)
1 byte Number of notes in custom scale
16 bytes (cs) * Custom correction scale
64 bytes (cs) ** Custom shift map for each voice
300 bytes(cs) 75x24-bit packed parameter values
1 byte Checksum
Note: The checksum is calculated only on the data marked with (cs).
Page 3
TC-Helicon Vocal Technologies
www.tc-helicon.com
Page 4
* Custom Correction Scale:
A correction scale is represented internally as 12 x 8 bit values
packed into 4 x 24 bit words (see the VoiceLive manual for a detailed
description).
Finally, the SYSEX data is created by packing each word into 4 x 7 bit
values as described in the data packing description. (This system is
used so that in the future software updates, it might be possible to
specify scales with more than 16 pitch divisions per octave).
** Custom Shift maps:
Shift maps are represented internally as 4 sets of 12 values (see the
VoiceLive manual for a detailed description). Each value specifies the
shift amount for its position in the chromatic scale. For example, a
shift map causing an upward major 3rd interval for all chromatic input
notes would be 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3. A unison map would
be 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0. Shift entries can also be
negative for downward shifts.
For the purpose of storing and dumping, the 12 bytes are packed into 4
x 24-bit values each holding 3 bytes. An offset of (0x32) is applied to
each value before grouping them into 4 x 24 bit words. The SYSEX data
within a preset dump is finally created by packing these 24-bit words
into 7 bit bytes using the data packing scheme. Since there are 4
voices on the VoiceLive, there are 4 custom shift maps making for 4x16
bytes of SYSEX data.
Parameter data – 0x22:
<Data> is 4 bytes. The first two bytes identify the parameter (group
and parameter ID). The last two bytes determine the value of the
parameter represented as a 14 bit 2’s complement signed value. If a
value exceeds the limits of the parameter, the value will be
automatically limited.
Example of 14 bit 2’s complement calculations:
Page 4
TC-Helicon Vocal Technologies
www.tc-helicon.com
Page 5
The value 169 (decimal) = 1x128 + 41 is represented as bytes 0x01 (MSB)
and 0x29 (LSB)
The value –43 ~ 16384-43 (decimal) = 16341 = 127*128+85 is represented
as bytes 0x7F (MSB) and 0x55 (LSB)
Example: Voice 1 bypass state (observable on edit page: CFG2)
Off - F0 00 01 38 00 4E 22 00 41 00 00 F7
On - F0 00 01 38 00 4E 22 00 41 00 01 F7
F0 = SYSEX start
00 = Byte 1 of 3 byte manufacturer’s ID for TC-Helicon
01 = Byte 2 of 3 byte manufacturer’s ID for TC-Helicon
38 = Byte 3 of 3 byte manufacturer’s ID for TC-Helicon
00 = SYSEX Device ID (defaolt value of 0)
4E = VoiceLive model ID
22 = VoiceLive Message Type Identifier (Parameter Data Identifier)
00 = Parameter Group ID
41 = Parameter ID for Voice #4 bypass state
00 = Data MSB (Most significant bit)
00 = Data LSB (Least signicant bit) (0 for voice off, 1 for voice on)
F7 = SYSEX message end
Shift Map Data – 0x31:
(Note: Shift Map data is represented differently than when it is a part
of a preset dump)
<Data> is 48 bytes. Each byte represents the shift mapping for the
respective note in the chromatic scale. A value of 0 is equivalent to –
24 semitones (down two octaves), 1A (26 in decimal) is equivalent to +2
semitones (up two semitones), 30 (48 in decimal) is equivalent to +24
semitones (up two octaves), and 36 (54 in decimal) is equivalent to N/C
(no change). Consult the VoiceLive manual for a complete description of
the Shift Map user parameter. If any entry in the shift map is beyond
the limits, the message will be ignored. (This data differs from the
when included in a preset dump because it’s not packed the same way and
does not have the 0x32 offset applied. It’s easier to read and
manipulate in this format). There are 4 voices * 12 semitone map
values giving 48 total bytes.
Page 5
TC-Helicon Vocal Technologies
www.tc-helicon.com
Page 6
Song Data – 0x12:
<Data> is 142 bytes. The first byte specifies the song number (from 0
to 49). The next 16 bytes specify a 16 character song name. The next
120 bytes represent song data. Each step of the song is represented by
a 24-bit word that is packed into 4 7-bit bytes as described in the
data packing section. 30 steps multiplied by 4 bytes per step gives
120 bytes total. Then there is a 24 bit “direct-mode-steps” word that
has been packed into four bytes. The final byte is a checksum that is
calculated from the 120 bytes of song data.
24 bit Word Step Format
aaaaaaaa.dddd.bbbb.eecccccc
a=preset number, b=root, c=type (chord or scale number, see VoiceLive
Manual for details), d=mode (scale=0, chord=1, shift=2, notes=3),
e=status *
* status: A song starts with the first step and ends with the first
step that has 0x0 for its status. All active song steps must have 0x2
for their status, all unused steps must have 0x0 for their status.
24 bit Direct-Mode-Steps Word
aaaaaa.bbbbbb.cccccc.dddddd
a=Direct Mode Step A, b=Direct Mode Step B, c=Direct Mode Step C,
d=Direct Mode Step D
Setup Data – 0x13:
<Data> is 197 bytes. All 49 x 24-bit setup parameters are sent packed
into 196 7-bit bytes as described in the data packing section. A
checksum calculated from all 49 parameters makes up the last byte.
Page 6
TC-Helicon Vocal Technologies
www.tc-helicon.com
Page 7
Parameter Grouping and Listing
Numbers in this section are shown in decimal notation.