The following text gives full information on system exclusive midi bulk dumps for the SY22 and SY35 (which are identical in every respect apart from slight differences in the samples) and is intended for use in the development of editors/librarians etc. There is plenty of hidden programmability (i.e. parameters not accessible from the synth's front panel), mostly for the FM elements.
The information is arranged as follows:
Negative numbers are generally represented in the usual way (2's complement) but remember any overflow! eg the value range 140,3F is -64,63 in decimal.
I haven't included any detailed info about the MULTI data format in the ALL V/M DUMP because I haven't worked any of it out! This is because it takes such a long time to do an ALL V/M dump that it didn't seem practical to be editing MULTI's by receiving-changing-sending. It would have been sensible for Yamaha to include a separate MULTI dump for this purpose (as with TG33).
Matt Thorman (thorman@teaching.physics.ox.ac.uk)
1) SINGLE VOICE DUMP FORMAT
Comments | ||
Start of sysex | ||
- | ||
Midi channel | ||
- | ||
Byte count for following block ($248 in 8-bit, ie 584 bytes) | ||
- | ||
- | ||
(space) | ||
(space) | ||
- | ||
- | ||
- | ||
- | ||
- | ||
- | ||
- | ||
- | ||
- | ||
Checksum (calculated on above block) - it is the 2's complement of the sum of all the bytes. Put another way: chk=(-S AND $7F) where S is the sum of the bytes and the $7F is there because obviously only the lowest 7-bits can be used! | ||
EOX |
2) ALL V/M DUMP FORMAT
Comments | ||
Start of sysex | ||
- | ||
Midi channel | ||
- | ||
Byte count for first voice block ($902 in 8-bit, ie 2306 bytes) | ||
- | ||
- | ||
(Data for first 4 voices, 4 * 574 bytes) | | |
- | ||
Checksum for 1st voice block (see SINGLE VOICE dump) | ||
Byte count for next block, (now 2296 bytes as there is no 'PK 2203VM') | ||
- | ||
(Data for 4 voices, 4 * 574 bytes) | ||
- | ||
Checksum for voice block | ||
- | ||
- | ||
(similarly for remaining 14 4-voice blocks) | ||
- | ||
- | ||
Byte count for MULTI data | ||
- | ||
- | ||
(MULTI data, 16 * 94 bytes each) | ||
- | ||
Checksum for MULTI data | ||
EOX |
3) VOICE DATA
Comments | |||
(I don't know what these bytes are but if you change them, the synth goes quiet!) | |||
Effect: D=depth (0 to 7); T=type(0 to 15) | |||
Voice name (8 characters) | |||
T=type (AB or ABCD); P=pitch bend (0 to 12) | |||
After touch (Level,PM,AM) and Mod Wheel (PM,AM) | |||
After touch pitch shift (-12 to +12) | |||
Envelope delay (same for all envelopes) | |||
Common attack rate (-64 to +63) | |||
Common release rate (-64 to +63) | |||
Wave | |||
Pitch shift (-12 to +12) | |||
V=velocity response; A=after touch response | |||
L=LFO wave; S=LFO speed | |||
LFO Delay | |||
LFO Rate | |||
A=LFO AM depth | |||
P=LFO PM depth | |||
E=env type (0=User, 7=Organ); P=pan (0=Right, 4=Left) | |||
Tone volume (0:max $7F:min) | |||
T=temperament; D=detune (note: these are not accessible from the synth but they are only really useful for FM elements) | |||
Envelope: L=level scaling; R=rate scaling | |||
D=envelope delay(on/off); A=attack rate | |||
D=decay rate 1; P=env peak (each of the envelope levels has a number: initial=0, attack=1, decay 1=2, decay 2=3. The number of the PEAK level must be put in the two bits PP for the envelope to work) | |||
Decay rate 2 | |||
Release rate | |||
Initial level (0=Max, 127=Min) (The peak level is the one with the lowest value!) | |||
Attack level (0=Max, 127=Min) | |||
Decay level 1 (0=Max, 127=Min) | |||
Decay level 2 (0=Max, 127=Min) | |||
Wave (This doesn't set the sound, just the name displayed. To change the sound, you have to alter the FM parameters. There is no way of selecting the presets unless you have all the values stored!) | |||
Pitch shift (-12 to +12) | |||
V=velocity response A=after touch response | |||
LFO wave/speed | |||
- | LFO delay | ||
- | LFO rate | ||
A=LFO AM depth; C=assign carrier; M=assign modulator | |||
P=LFO PM depth; C=assign carrier; M=assign modulator. (note: normally AM just creates tremolo effects by modulating the carrier, but now you can set it to vary the modulation level as well! When you change PM on the synth it controls both modulator AND carrier. Here you can set it to modulate just one of them, creating strange beating effects.) | |||
E=envelope type, P=pan | |||
Feedback | |||
X=fixed freq mode; W=waveform; F=freq(harmonics) | |||
FM level (equivalent to FM lvl control on synth) | |||
T=temperament; D=detune (the temperament makes frequency ratios between adjacent notes vary over the keyboard- producing bell like effects. Detune can be used to create beating effects between carrier and modulator.) | |||
+ | |||
| | |||
Modulator envelope, defined as per element A's envelope | |||
| | |||
| | |||
+ | |||
X=fixed freq mode; W=waveform; F=freq(harmonic) | |||
Tone Volume | |||
T=temperament; D=detune | |||
+ | |||
| | |||
Carrier envelope, defined as per element A's envelope | |||
| | |||
| | |||
+ | |||
Wave | |||
Pitch shift (-12 to +12) | |||
V=velocity response; A=after touch response | |||
L=LFO wave; S=LFO speed | |||
LFO Delay | |||
LFO Rate | |||
A=LFO AM depth | |||
P=LFO PM depth | |||
E=env type (0=User, 7=Organ); P=pan (0=Right, 4=Left) | |||
Tone volume (0:max $7F:min) | |||
T=temperament; D=detune (note: these are not accessible from the synth but they are only really useful for FM elements) | |||
+ | |||
| | |||
Envelope | |||
| | |||
| | |||
+ | |||
Wave | |||
Pitch shift (-12 to +12) | |||
V=velocity response A=after touch response | |||
LFO wave/speed | |||
- | LFO delay | ||
- | LFO rate | ||
A=LFO AM depth; C=assign carrier; M=assign modulator | |||
P=LFO PM depth; C=assign carrier; M=assign modulator | |||
E=envelope type, P=pan | |||
Feedback | |||
X=fixed freq mode; W=waveform; F=freq(harmonics) | |||
FM level | |||
T=temperament; D=detune | |||
+ | |||
| | |||
Modulator envelope | |||
| | |||
| | |||
+ | |||
X=fixed freq mode; W=waveform; F=freq(harmonics) | |||
Tone volume | |||
T=temperament; D=detune | |||
+ | |||
| | |||
Carrier envelope | |||
| | |||
| | |||
+ | |||
Vector level rate | |||
Vector detune rate | |||
Level step 1 length ($17E=Repeat; $17F=End) | |||
Level step 1 X (-31 to +31) | |||
Level step 1 Y (-31 to +31) | |||
Above four bytes repeated for each level step | |||
- | |||
Detune step 1 length ($17E=Repeat; $17F=End) | |||
Detune step 1 X (-31 to +31) | |||
Detune step 1 Y (-31 to +31) | |||
Above four bytes repeated for each detune step | |||
- | |||
Null | |||
8 bit checksum |
The 8-bit checksum is calculated in a very similar way to the 7-bit sysex checksum. When summing all the bytes, the overflows (in brackets) must be treated as the 8th bit of the following byte. The way I think of this is that all the bytes are summed but the overflow bytes must be multiplied by 128 first. The 8 lowest bits of the sum then give the checksum so that:
(-S AND $7F) goes into byte 23D (extracting least significant 7 bits)
(-S AND $80)/$80 goes into byte 23C (extracting 8th bit)
Remember that the first byte in each vector step is an overflow! If you miss one out then the checksum is wrong.
There is some good news though: you DON'T NEED TO BOTHER with the 8-bit checksum if you are just altering data in a SINGLE VOICE dump. When you send a single voice to the synth it goes into the edit buffer and it doesn't matter if the 8-bit checksum is wrong. It gets put right if you STORE the voice. However, if you are changing things in an ALL V/M dump then the 8-bit checksums must be correct for every voice. This time when you send the data to the synth it gets STORED directly in the Internal voice bank, so everything must be right.
4) FM OPERATOR WAVEFORM
There are 8 waveforms to choose from. If the waveform number is represented as 3 bits, ABC. A chooses between the two source waveforms:
A=0 A=1 . . . " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " . .
The first is just a sine, the second one is wierd. It looks like bits of a sine wave with intermediate linear portions where it crosses zero. Either type can be further modified if B and/or C is set.
BC=01 . " . . " . . . . . . . . . . .____________. .____ BC=10 .-. .-. . . . . . . .____________. . .____ . . . . . . . . " " BC=11 .-. .-. .-. .-. . . . . . . . . . . .____________. . ._____