I'm at this topic again. First off: just out of curiosity, how is the checksum calculated? I xor'ed all bytes and get 0x29 (which is accidently decimal 41, but you said "hex 41").
Other thing: I can't get yet a noticeable effect of setting decay.
char reset[] = { 1,0xff };
char GS_Reset[] = { 11,0xf0,0x41,0x00,0x42,0x12,0x40,0x00,0x7f,0x00,0x00,0xf7};
char decay[] = { 7,0xb0,0x63,0x01,0x62,0x64,0x06,0x7f};
setup() {
play(reset);
play(GS_Reset);
Decay(0);
}
void Decay(int val) {
decay[6] = val&0x7f;
play(decay);
}
int play (char *s) {
char str[3];
for (int i=0;i<s[0];i++) {
snprintf(str,s[0]+1,"%02X",(unsigned char)s[i+1]);
midiSerial.write(s[i+1]);
mySerial.write(str);
}
}