TC-Helicon VoiceWorks MIDI System Exclusive
Version 1.4
General Message Format
All numerical values are in HEXADECIMAL notation unless otherwise indicated. Decimal equivalents appear in brackets.
General message format:
F0
: MIDI System Exclusive message start00 01 38
: TC-Helicon manufacturer ID<Device ID>
: System Exclusive Device ID (user parameter)4C
: VoiceWorks model ID<Message ID>
: VoiceWorks message type identifier<Data>
: Data depends on message typeF7
: MIDI System Exclusive message terminator
Preset Numbers
Preset numbers are represented in SysEx messages as 2 bytes (14-bit value). The first byte contains the 7 least significant bits, and the second byte contains the 7 most significant bits. Preset number zero represents the currently edited preset.
Example: Factory preset number 67 (decimal) is translated to bytes 43
(LSB) and 00
(MSB).
Example: User preset number 48 (decimal) is represented as bytes 14
(LSB) and 01
(MSB).
Data Packing (24-bit words to 4x7-bit bytes)
Data is packed to represent a 24-bit value as 4 bytes of 7 bits each, as SysEx data is limited to 7 bits per byte. The first three bytes hold bits 0-6, 7-13, and 14-20 of the 24-bit value, respectively. The fourth byte holds bits 21-23 as LSBs with remaining bits as zeros.
Example: A 24-bit parameter value of 0x266
is represented as 66 04 00 00
in a SysEx package.
Decoding:
- Byte 1:
66
hex =1100110
(abcdefg) - Byte 2:
04
hex =0000100
(hijklmn) - Byte 3:
00
hex =0000000
(opqrstu) - Byte 4:
00
hex =0000000
(****vwx)
Final 24-bit Value: vwxopqrstuvwxyzabcdefg
(0x000266
)
Message Data Format
The format of data used in different SysEx messages varies. Below are descriptions for each message type.
SysEx Message Types and Identifiers
Message Type | Identifier |
---|---|
VoiceWorks Request Preset | 45 |
VoiceWorks Request Parameter | 47 |
VoiceWorks Preset Data | 20 |
VoiceWorks Parameter Data | 22 |
VoiceWorks Request Shift Map | 51 |
VoiceWorks Shift Map Data | 31 |
VoiceWorks Request Song | 14 |
VoiceWorks Request Setup | 15 |
VoiceWorks Song Data | 12 |
VoiceWorks Setup Data | 13 |
VoiceWorks Preset Received Notification | 34 |
VoiceWorks Data Request Messages
Preset Request (45)
<Data>
: 2 bytes representing the requested preset number (see Preset Numbers section).
Parameter Request (47)
<Data>
: 2 bytes. The first byte defines the parameter group, and the second byte identifies the parameter within the group.
Shift Map Request (51)
<Data>
: 1 byte. The value is ignored. The response will be a Shift Map Data message.
Song Request (14)
<Data>
: 1 byte specifying the song number (0 is the first song). The response will be a Song Data message.
Setup Map Request (15)
<Data>
: 1 byte. The value is ignored. The response will be a Setup Data message.
VoiceWorks Data Messages
Preset Receive Notification (34)
<Data>
: 1 byte. 1
indicates success, 0
indicates failure. This message is sent after receiving a SysEx preset to confirm successful storage.
Preset Data (20)
<Data>
: 388 bytes organized as:
- 2 bytes: Preset number
- 12 bytes: Preset name (ASCII characters)
- 1 byte: Number of notes in custom scale
- 16 bytes: Custom correction scale (uses data packing)
- 64 bytes: Custom shift map for each voice (uses data packing)
- 292 bytes: 73x24-bit values for each parameter (uses data packing)
- 1 byte: Checksum of the data marked 'cs'
Custom Correction Scale: Represented internally as 12x8-bit values packed into 4x24-bit words. An offset of 0x32
is applied before packing. The SysEx data is created by packing these words into 7-bit bytes.
Custom Shift Maps: Represented internally as 4 sets of 12 values, each specifying a shift amount. An offset of 0x32
is applied before packing into 4x24-bit words. SysEx data is created by packing these words into 7-bit bytes.
Checksum: A 1-byte value representing the 7 least significant bits of the sum of all bytes contributing to the checksum.
Parameter Data (22)
<Data>
: 4 bytes. The first two bytes identify the parameter (group and ID). The last two bytes represent the parameter value as a 14-bit 2's complement signed value.
Example: Control Voice #4 bypass state.
F0 00013800 4C 2200440000 F7
F0
: SysEx start000138
: TC-Helicon manufacturer ID00
: SysEx Device ID4C
: VoiceWorks model ID22
: Message Type (Parameter Data)00
: Parameter Group ID44
: Parameter ID (Voice #4 bypass state)0000
: Parameter Data (Value 0, decimal)F7
: SysEx end
Shift Map Data (31)
<Data>
: 48 bytes. Each byte represents the shift mapping for a chromatic scale note. Values range from 0
(-24 semitones) to 36
(+24 semitones), with 30
(48 decimal) for +24 semitones and 36
(54 decimal) for N/C (no change). This format is easier to read and manipulate than when included in a preset dump.
Song Data (12)
<Data>
: 138 bytes. Includes song number, 16-byte song name, 120 bytes of song data (30 steps x 4 bytes/step), and a 1-byte checksum.
24-bit Word Step Format: aaaaaaaaddddbbbbbeeecccccc
a
: Preset numberb
: Rootc
: Type (chord or scale number)d
: Mode (scale=0, chord=1, shift=2, notes=3)e
: Status (0x2
for active,0x0
for end)
Setup Data (13)
<Data>
: 197 bytes. Contains 49 setup parameters packed into 196 7-bit bytes, followed by a checksum byte.
Parameter Grouping and Listing
Preset Parameters (Group 0)
Parameter Name | ID | Min | Max |
---|---|---|---|
voice level1 | 0 | 0 | 31 |
voice voicing1 | 1 | 0 | *depends on harmony mode |
voice gender1 | 2 | -50 | 50 |
voice vibsty1 | 3 | 0 | 11 |
voice vibamt1 | 4 | 0 | 100 |
voice pan1 | 5 | 0 | 200 |
voice level2 | 6 | 0 | 31 |
voice voicing2 | 7 | 0 | *depends on harmony mode |
voice gender2 | 8 | -50 | 50 |
voice vibsty2 | 9 | 0 | 11 |
voice vibamt2 | 10 | 0 | 100 |
voice pan2 | 11 | 0 | 200 |
voice level3 | 12 | 0 | 31 |
voice voicing3 | 13 | 0 | *depends on harmony mode |
voice gender3 | 14 | -50 | 50 |
voice vibsty3 | 15 | 0 | 11 |
voice vibamt3 | 16 | 0 | 100 |
voice pan3 | 17 | 0 | 200 |
voice level4 | 18 | 0 | 31 |
voice voicing4 | 19 | 0 | *depends on harmony mode |
voice gender4 | 20 | -50 | 50 |
voice vibsty4 | 21 | 0 | 11 |
voice vibamt4 | 22 | 0 | 100 |
voice pan4 | 23 | 0 | 200 |
harm mode | 24 | 0 | 3 |
harm root | 25 | 0 | 11 |
harm type | 26 | 0 | *depends on harmony mode |
harm level | 27 | 0 | 31 |
harm smooth | 28 | 0 | 100 |
harm lead | 29 | 0 | 1 |
harm style | 30 | 0 | 7 |
harm sty amt | 31 | 0 | 10 |
harm tuning | 32 | 0 | 2 |
harm bend | 33 | 0 | 1 |
harm porta | 34 | 0 | 200 |
harm latch | 35 | 0 | 1 |
harm notesatt | 36 | 0 | 100 |
harm notesrel | 37 | 0 | 100 |
thic level | 38 | 0 | 31 |
thic detune | 39 | 0 | 25 |
thic spread | 40 | 0 | 100 |
effe level | 41 | 0 | 31 |
effe revdlymix | 42 | 0 | 100 |
effe leadrevsend | 43 | -20 | 31 |
effe harmrevsend | 44 | -20 | 31 |
effe auxrevsend | 45 | -20 | 31 |
effe leaddlysend | 46 | -20 | 31 |
effe harmdlysend | 47 | -20 | 31 |
effe auxdlysend | 48 | -20 | 31 |
effe dly2revsend | 49 | -20 | 31 |
effe revtype | 50 | 0 | 13 |
effe revpredlylev | 51 | 0 | 100 |
effe revdecaytime | 52 | 0 | 200 |
effe revcolorl | 53 | 0 | 6 |
effe revcolorh | 54 | 0 | 6 |
effe dlytype | 55 | 0 | 2 |
effe dlytime | 56 | 0 | 1800 |
effe dlytempo | 57 | -21 | 1 |
effe dlyfeedback | 58 | 0 | 99 |
effe dlyhfdamp | 59 | 10 | 23 |
cor root | 60 | 0 | 11 |
cor scale | 61 | 0 | 5 |
cor win | 62 | 0 | 200 |
cor att | 63 | 0 | 99 |
cor amt | 64 | 0 | 99 |
voice1 bypass | 65 | 0 | 1 |
voice2 bypass | 66 | 0 | 1 |
voice3 bypass | 67 | 0 | 1 |
voice4 bypass | 68 | 0 | 1 |
harm bypass | 69 | 0 | 1 |
thic bypass | 70 | 0 | 1 |
effe bypass | 71 | 0 | 1 |
cor bypass | 72 | 0 | 1 |
* For Harmony Mode dependent parameters, see the VoiceWorks Manual for details.
Setup Parameters (Group 1)
Parameter Name | ID | Min | Max |
---|---|---|---|
dryllevel | 0 | -1 | 31 |
leadpan | 1 | 0 | 200 |
lowcut | 2 | 0 | 3 |
dynamics | 3 | 0 | 3 |
compthresh | 4 | -60 | 0 |
compratio | 5 | 0 | 13 |
gate | 6 | -71 | 0 |
eqroute | 7 | 0 | 3 |
isfreq | 8 | 0 | 22 |
lcboost | 9 | -12 | 12 |
hsfreq | 10 | 0 | 22 |
hcboost | 11 | -12 | 12 |
midfreq | 12 | 0 | 22 |
mcboost | 13 | -12 | 12 |
eq_q | 14 | 0 | 16 |
outlevel | 15 | -100 | 0 |
output | 16 | 0 | 1 |
samplerate | 17 | 0 | 2 |
input | 18 | 0 | 1 |
globaleff | 19 | 0 | 100 |
tuning | 20 | 0 | 80 |
midichan | 21 | 0 | 16 |
midifilt | 22 | 0 | 3 |
CC-Ctrl Mode | 23 | 0 | 2 |
Global Chord | 24 | 0 | 1 |
keysplit | 25 | 24 | 127 |
keydir | 26 | 0 | 1 |
vibctrl | 27 | 0 | 1 |
notestrans | 28 | -4 | 4 |
bendrange | 29 | 0 | 12 |
notes4chan | 30 | 0 | 1 |
fs1 | 31 | 0 | 9 |
fs2 | 32 | 0 | 9 |
fs3 | 33 | 0 | 9 |
mididump | 34 | 0 | 152 |
erasesong | 35 | 0 | 50 |
restore | 36 | 0 | 100 |
viewangle | 37 | 0 | 6 |
delaycomp | 38 | 0 | 1 |
micsense | 39 | 0 | 1 |
sysexid | 40 | 0 | 127 |
current_preset | 41 | 1 | 100 |
taptempo | 42 | 0 | 1800 |
preset_edited | 43 | 0 | 1 |
bypass_all | 44 | 0 | 1 |
mic_in | 45 | 0 | 1 |
48v | 46 | 0 | 1 |
20db | 47 | 0 | 1 |
Bypass Mode | 48 | 0 | 1 |