I’m working on a preset for the Kawai XD-5 and have hit a wall trying to implement full waveform selection for the S2, S3, and S4 tone sources. Kawai appears to use a pair of SysEx bytes to set a waveform index from 0–255, a way of working with certain parameters that appears to be shared across several synths in their range.
Electra One App can you see this or should i make it public?
Whatisworking :
I have a fully working control for S1 waveform selection (on page 2), which sends :
F0 40 09 10 00 06 15 [MSB] [LSB] F7
Where :
[MSB] is the most significant 7 bits (bit 7 of the value),
[LSB] is the least significant 7 bits (bits 0–6).
Here’s the Sysex block for S1 that works :
[
“F0”,
“40”,
“9”,
“10”,
“00”,
“06”,
“15”,
{
“type”: “value”,
“rules”: [
{
“type”: “sysex”,
“parameterNumber”: 211,
“parameterBitPosition”: 7,
“byteBitPosition”: 0,
“bitWidth”: 7
}
]
},
{
“type”: “value”,
“rules”: [
{
“type”: “sysex”,
“parameterNumber”: 211,
“parameterBitPosition”: 0,
“byteBitPosition”: 0,
“bitWidth”: 7
}
]
},
“F7”
]
This maps the 0–255 range cleanly into two 7-bit MIDI bytes and works reliably for S1.
What’s not working: S2, S3, S4
When duplicating this structure for S2/S3/S4 waveform selection, adjusting the address byte (15) accordingly, things start to break :
SysEx messages either get stuck, loop, or only range from 00–7F.
In some attempts, MSB never increments.
Other times, the parameter outputs a static value like 19 19 19 19.
Using parameterNumber = 212, 213, 214, etc., and combinations of value and expression-based rules — no luck.
Stuff I’ve Tried :
Rewriting with expression rules (e.g., (value >> 7) and value & 127)
Testing both List controls and Value controls (0–255)
Reviewing working community presets (e.g., K1/K4 below) but their complexity is a beyond me atm.
Hi I downloaded your preset but I do not find the controls in it for wave form selection S2, S3 and S4. Only on S1.
Without those controls it’s logic it cannot work
that preset Electra One App can’t work indeed; I see 2 issues:
1.The sysex assigned to all 4 wavevorms is exactly the same , apart from the MSB and LSB bytes. At least one of the subcommand bytes should also be different for the synth to make sense. Else all four controls keep changing only Wave S1.
2.I believe the format is one byte short:
You have “F0”,“40”,“09”,“10”,“00”,“06”,“15”,MSB,LSB,“F7”
where 09 is MIDI channel 10 and Function number = “10”
But looking at the XD-5 format, shouldn’t you have : “F0”,“40”,“09”,“10”,“00”,“06”,SBC1,SBC2,MSB,LSB,“F7” ?
in other words ; shouldn’t there be 2 subcommand bytes instead of 1 ?
Hello @NewIgnis, welcome back and thank you for picking this up again
You are exactly right that 2 subcommands are needed. This is the case with every other control in the xd-5 preset. for example: ‘key track’ & ‘course tune’
I’m replicating what you have tried over here and the control goes dead again…
I am seeing the action in midi monitor
But hearing no reaction from the Xd-5
I figure the k4 & Xd-5 have the same amount of 256 waveforms?. Do you remember any special case for the wave select control when you were making that preset?
The waveform on the K4 outputs indeed 2 variable bytes :
Do you have the sysEx manual for the Xd-5 by hand? What does it say about the waveform control? (Be aware I arbitraritly added the '15" twice , I didn’t check any manual)
And can you show me the output in midi monitor?
the Sub status 1 byte is fixed: it is indeed 21 or 15H.
the data byte is indeed made out of the lowest 7 bytes of the control. That is correct too.
but Sub status 2 byte is not made out of the highest 7 bytes of the control. Instead, you’ll have to create yourself a little function to create that byte, because it needs to know which of the 4 sources (0=S1…3=S4) you are about to change, multiply that by 2 to shift it one bit to the left and add to it the 8th bit of the control (as the control runs from 0..255 it has exactly 8 bits)
Since S1 corresponds with a 0, your current SysEx did correspond with the S1 choice by accident. That’s why S1 works and the other don’t.
As for high and low bits: just as with the decimal system, the lowest numbers are to the right, and the highest numbers are to the left. so in the byte 01001001: the highest bit has a value of ‘0’ and the lowest a value of '1. Similar to a number in the decimal system: in number 584679, the 5 is the highest digit and the 9 is the lowest