MIDI Voice bank changes in PSR E303

This section is for the popular E series keyboards from Yamaha. If you have a problem, need info or have tips to pass on, please post here.

Moderators: Derek, parametric, Saul

SiriusHardware
Member
Member
Posts: 30
Joined: Wed Dec 07, 2011 6:00 pm
Great Britain

MIDI Voice bank changes in PSR E303

Unread post by SiriusHardware » Mon Sep 28, 2015 12:32 am

I use an old Atari ST sequencer program which can only send program change messages in the range 1-128 - there is no direct facility for sending voice bank switching messages. Therefore, if I want to send a program change which will select a voice in one of the 303's other banks I first have to send a bank switch message which I have embedded in the part / track myself, by writing it in there by hand if necessary.

The manual is here:-

http://download.yamaha.com/search/produ ... _id=106905

According to that the base command for a bank switch is 'Control Change', 0, 32.

It doesn't bother to explain what the base MIDI command for, ie, 'Control change on channel 1' actually is, but from other sources I know it is Hex B0, Decimal 176

'Bank switch' on channel 1 would therefore begin 176, 0, 32...

Further to that, the voice information for (for example) 'Standard Drum Kit' is

Voice: #109
Name: Standard Drum Kit
Bank Select MSB = 127
Bank Select LSB = 0
Program change = 1

So, am I right in thinking that if I want to send a channel 1 'switch to voice bank' message to switch to the bank containing this voice, I need to send

176, 0, 32, 127, 0

Followed by program change 1 to select the standard drum kit?
User avatar
Sonus
Member
Member
Posts: 250
Joined: Tue Aug 05, 2008 12:00 am

Re: MIDI Voice bank changes in PSR E303

Unread post by Sonus » Mon Sep 28, 2015 6:36 am

Deleted post
Last edited by Sonus on Thu Dec 31, 2015 8:00 am, edited 4 times in total.
User avatar
SeaGtGruff
Global Moderator
Global Moderator
Posts: 672
Joined: Wed Jan 29, 2014 4:24 am
United States of America

Re: MIDI Voice bank changes in PSR E303

Unread post by SeaGtGruff » Mon Sep 28, 2015 8:00 am

You're on the right track, but you need a few course corrections. :)

(1) In a MIDI file there should be a delta-time before each message. Delta-times are given as variable-length values, which are explained on some of the web pages that discuss MIDI, so I won't try to explain them here.

(2) Bank Select MSB and Bank Select LSB are both Control Change events, so you generally need the Control Change message (176) on both events. However, there's a thing called "running status" that lets you leave off the status byte in certain situations.

(3) The Program numbers that are listed in your PSR-E303 manual are off by 1, because Yamaha is using the 1-128 numbering scheme, whereas MIDI Program Change messages use 0-127. So you must subtract 1 from the Program numbers listed in your manual. (On the other hand, the Bank Select MSB and LSB numbers are fine as given.)

(4) The MIDI Channel is indicated by the lower nibble of the MIDI event. MIDI Channels are numbered 0-15 inside the MIDI events, even though it's typical for people to refer to them as 1-16. Thus, a Control Change on Channel 6 would be 176 + 5 = 181, where 176 (hex B0) means "Control Change" and 5 in the lower nibble means "Channel 6."

I'm going to assume that you're able to create your file on the Atari ST with the Program Changes already embedded at the desired spots, such that they're already preceded by delta-times and all you need to do is edit the file to insert the Bank Selects. I'm also assuming that you're working with decimal values.

In that case you might have a file that looks like the following:

blah, blah, blah, 192, 29, blah, blah, blah, etc.

where "192" = "Program Change on Channel 0" and "29" = "Program 29" (possibly called "Channel 1" and "Program 30" by the software).

But let's say you really wanted to select Program 29 (or 30) in some other Bank. Since the delta-time for the Program Change is already there (in the "blah, blah, blah" immediately preceding the Program Change), you can insert the following values right before the Program Change (I'm arranging them vertically this time so they're easier to see):

blah
blah
blah <-- the delta-time is in here somewhere
>>> begin inserting <<<
176 <-- Control Change on Channel 0
0 <-- Controller 0 (Bank Select MSB)
0 <-- MSB = 0
0 <-- delta-time = 0 ticks
176 <-- Control Change on Channel 0
32 <-- Controller 32 (Bank Select LSB)
112 <-- LSB = 112
0 <-- delta-time = 0 ticks
>>> stop inserting <<<
192 <-- Program Change on Channel 0
29 <-- Program = 29
blah
blah
blah
etc.

This will select Voice 37 = "Overdriven Guitar," which has Bank MSB 0, Bank LSB 112, and Program 29 (listed as 30 in the manual).

You can shorten that by using "running status," although it saves only 1 byte:

blah
blah
blah <-- the delta-time is in here somewhere
>>> begin inserting <<<
176 <-- Control Change on Channel 0
0 <-- Controller 0 (Bank Select MSB)
0 <-- MSB = 0
0 <-- delta-time = 0 ticks
>>> You can omit the second byte for "Control Change on Channel 0" but you still need the delta-time <<<
32 <-- Controller 32 (Bank Select LSB)
112 <-- LSB = 112
0 <-- delta-time = 0 ticks
>>> stop inserting <<<
192 <-- Program Change on Channel 0
29 <-- Program = 29
blah
blah
blah
etc.

Another thing I might add is that drum kits are generally restricted to Channel 10 (i.e., 9 to the computer), or to Channels 9 and 10 (i.e., 8 and 9) if two percussion tracks are being used. This is to maintain compatibility with the General MIDI Level 1 ("GM1" or just "GM") and General MIDI Level 2 ("GM2") standards-- especially GM/GM1, which had no way to select the drum kit (since it had no Program number in GM1) and which expected Channel 10 (9) to be used for the drum kit. You can certainly use a drum kit on any Channel that you want, and use non-drum-kit Voices on Channels 9 and 10 (8 and 9) if you want, but that could cause playback problems if the file were played back on a keyboard or program that's limited to GM1.
Michael Rideout
Current keyboards: Yamaha YPT-400, PSR-E433, PSR-E443, PSR-EW400, MX49 BK
Current controllers: M-Audio Axiom 61-II
Previous keyboards: Farfisa Matador 611; Casio CTK-710
SiriusHardware
Member
Member
Posts: 30
Joined: Wed Dec 07, 2011 6:00 pm
Great Britain

Re: MIDI Voice bank changes in PSR E303

Unread post by SiriusHardware » Mon Sep 28, 2015 6:36 pm

SeaGtGruff, thanks for that very detailed information which will be a great resource not only for me now but for anyone else surfing onto this thread looking for the same information. I really appreciate your having taken the time to set everything out so clearly in the way that Yamaha's own documentation for this unit really didn't.

I was aware of the Minus-One offset for channel numbers and program change numbers (Hence B0 rather than B1 for 'Control Change on channel 1'), but it was good information to include in the general breakdown anyway.

I'm not planning to use embedded program changes within the MIDI track information, instead I'm going to use a feature of the software which lets you define a program change value for each 'part' which is sent to the synth as soon as playback passes over the threshold of the start of the part. Doing it that way makes it much easier to loop a part and change the sound 'on the fly' to see which sound is really the best fit for the part - as you know, the voice with the most appropriate sounding name doesn't always end up being the best voice to use. In this feature, the software expects the program change numbers to be in the range 1-128 although of course it converts them internally to the range 0 to 127.

What the same feature of the software doesn't have is a way to send a 'bank select' before the 'program change' - so the 'bank select' is something that I'm going to have to create by hand, and save as a very short 'part' which I will then drop onto the track just ahead of the part where the program change is done. That way, it will encounter the 'bank select' first and then execute the program change within that bank when it gets to the main 'part'.

At one time I understood MIDI traffic really well, to the extent that I made myself a MIDI-CV converter for my Roland SH101 and wrote the firmware for the 8052 microprocessor... but it's amazing how all this stuff just dribbles away out of your ears if you don't refresh it often enough. One thing I honestly don't remember at all is 'delta time' so it's a good thing you mentioned that - I do remember that certain system messages such as the midi 'tick' had the highest priority of all and were even allowed to pop up in the middle of multibyte command packets.

Right now, the 303 is back with its owner for a few days but I may see if my SY22 supports a similar bank switching arrangement to get between internal and preset memories, and if it does I'll experiment with that in the meantime.

Incidentally it's interesting that you say the 'Drum Channel' is traditionally channel 10 - All my gear is pre-GM and in that era Yamaha seemed to favour channel 16 for drums, whereas Roland (and especially the MT-32, which was perhaps the first widely adopted 'standard voice set') seemed to prefer channel 10. So maybe Roland won that battle?

Thanks again for the info!
SiriusHardware
Member
Member
Posts: 30
Joined: Wed Dec 07, 2011 6:00 pm
Great Britain

Re: MIDI Voice bank changes in PSR E303

Unread post by SiriusHardware » Mon Sep 28, 2015 7:01 pm

Sonus wrote:B0 00 7F (B0) 20 00 C0 00 (second 'running' status byte can be omitted)
Sonus, thanks for this illustration as well. Armed with all of this, I should soon be able to 'get bank selecting' on the 303.

Edit: Just noticed you've added a little bit of Notator in there :-)

It's actually Cubase 2 that I use on the Atari ST. Lovely program, but made in the days when instruments with more than 128 sounds were apparently unimaginable.
Last edited by SiriusHardware on Tue Sep 29, 2015 12:26 am, edited 2 times in total.
User avatar
SeaGtGruff
Global Moderator
Global Moderator
Posts: 672
Joined: Wed Jan 29, 2014 4:24 am
United States of America

Re: MIDI Voice bank changes in PSR E303

Unread post by SeaGtGruff » Mon Sep 28, 2015 11:46 pm

Delta-times are used only in MIDI files, since any device or program that plays the file needs to know when to perform each event. When MIDI messages are streamed live, there are no delta-times in front of each event, since an event isn't sent until it's time to perform that event. MIDI clock ticks are sent in a MIDI stream.

If you're using the program to send the Bank Select Control Change and Program Change events when needed, then you should omit the delta-times for each event, since the program won't send a given packet of MIDI data until it's time to do so, hence there's no need to embed the delta-times inside the data.

Regarding Yamaha's and Roland's "dueling protocols" in the pre-GM days, I've seen web articles that suggested Roland's way of doing things won out over Yamaha's in other areas as well, such as when the Programs or instrument sounds were being standardized. It's also interesting to read about the GS (Roland) and XG (Yamaha) extensions to GM, and see how they compare and contrast with the GM2 standard that was eventually hammered out.

To be honest, I think it would make more sense to put the drum channel either first (channel 1) or last (channel 16). As I understand it, whenever events on channel 10 and other channels are to be performed simultaneously, the events for channel 10 are sent first so the drums will be "on beat." It seems odd to give precedence to a channel that's "in the middle" of the channel numbers.
Michael Rideout
Current keyboards: Yamaha YPT-400, PSR-E433, PSR-E443, PSR-EW400, MX49 BK
Current controllers: M-Audio Axiom 61-II
Previous keyboards: Farfisa Matador 611; Casio CTK-710
SiriusHardware
Member
Member
Posts: 30
Joined: Wed Dec 07, 2011 6:00 pm
Great Britain

Re: MIDI Voice bank changes in PSR E303

Unread post by SiriusHardware » Tue Sep 29, 2015 12:21 am

SeaGtGruff wrote:Delta-times are used only in MIDI files, since any device or program that plays the file needs to know when to perform each event. When MIDI messages are streamed live, there are no delta-times in front of each event, since an event isn't sent until it's time to perform that event. MIDI clock ticks are sent in a MIDI stream.
Ah, I get you. In the past I only dealt with real time MIDI traffic, not MIDI files, so that explains why I never came across the concept of 'Delta Time', but it makes sense the way you explain it, just as a music score has to have rests, etc, to keep the timing correct, so a midi file must also need 'time bridges' between notes and other events to keep the timing correct.
SeaGtGruff wrote: Regarding Yamaha's and Roland's "dueling protocols" in the pre-GM days, I've seen web articles that suggested Roland's way of doing things won out over Yamaha's in other areas as well, such as when the Programs or instrument sounds were being standardized. It's also interesting to read about the GS (Roland) and XG (Yamaha) extensions to GM, and see how they compare and contrast with the GM2 standard that was eventually hammered out.
I didn't have time to go into it but I think I noticed that the 303 had one or more of these supersets of General Midi - possibly 'XG Lite', although if so, yet another variation on a standard seems to defeat the object of there being a standard at all. That said, the idea that the various manufacturers eventually managed to co-operate to create a standard at all is quite impressive - I can't remember anything similar since the days of the Japanese - led MSX computers.
User avatar
SeaGtGruff
Global Moderator
Global Moderator
Posts: 672
Joined: Wed Jan 29, 2014 4:24 am
United States of America

Re: MIDI Voice bank changes in PSR E303

Unread post by SeaGtGruff » Tue Sep 29, 2015 10:31 am

Yes, the PSR-E303 uses XGlite, which is a reduced version of XG. Some of the extended abilities that were added to GM by GS and XG were later incorporated into GM2.

I need to correct something I'd said. GM2 uses Channels 10 and 11 for drum kits. But Yamaha uses Channels 9 and 10 for drum kits, which confused me. I take it this is more of a recommended standard than a requirement, since the ability to select a Bank and select a drum kit-- which was added in GS, XG, and GM2-- means Channel 10 is no longer limited to drums and you can select drums on any of the 16 Channels.

Getting back to XGlite, the PSR-E303 can use many XG messages-- if you search for "yamaha xg specs," "yamaha xg manual," or something similar, you can find PDF copies of various versions of XG documentation. XGlite is a subset of XG, so not all XG messages are available in XGlite, and some of the parameters are different-- e.g., the Reverb Type and Chorus Type are selected using XG messages and the XG documentation has tables showing the parameter values to select each Reverb Type and Chorus Type, but the parameter values are different in XGlite; the PSR-E303 manual has tables that show the parameter values which the PSR-E303 uses.

There is quite a bit you can do on the PSR-E303 by sending it Control Change messages, far beyond what its panel controls and Function menu allow. However, you should be aware that messages sent to the PSR-E303 do not, for the most part, affect its panel settings-- e.g., if you send a Bank Select and Program Change on Channel 1, it won't change the Main Voice! The Main, Dual, and Split Voices are transmitted on Channels 1, 2, and 3, respectively, but are actually independent of the MIDI Channels. The PSR-E303 has 32 sound generators (i.e., 32-note polyphony) which are used as needed to play the requested sounds and notes. So if you were to select "Grand Piano" for the Main Voice, send the MIDI to a DAW and echo it back to the PSR-E303, use the DAW to select "Jazz Organ 1" for Channel 1, and play on the keyboard, you would hear both the "Grand Piano" from the Main Voice and the "Jazz Organ 1" from Channel 1, since the Main Voice is using some of the 32 sound generators for its notes and Channel 1 is also using some of the 32 sound generators for its notes. To hear only what's being sent by the DAW, turn off Local control.

Anyway, the "MIDI Implementation Chart" in the back of the manual shows which Controller numbers are recognized:

CC#1 = Modulation. You might be able to control the various aspects of the Modulation with other messages, as described in the XG documentation, but I haven't tried it yet.

CC#10 = Pan.

CC#11 = Expression.

CC#71 = Filter Resonance.

CC#72 = Release Time.

CC#73 = Attack Time.

CC#74 = Filter Cutoff.

CC#84 = Portamento Control. I haven't been able to do anything with this yet, and haven't found much information about it on the web. There are CCs for Portamento Time and Portamento On/Off, but the PSR-E models don't recognize them. It might be possible to use XG messages to select Mono mode on a Channel and enable Portamento, but I haven't tried it yet. Still, the fact that CC#84 is recognized seems to imply that Portamento is possible.

CC#91 = Reverb Depth. This is missing from the PSR-E303's Function menu, even though Chorus Depth (CC#93) is included in its Function menu. EDIT: Actually, the Function menu does have a Reverb Depth (Send Level), but it's apparently for the entire keyboard, rather than being available separately for the Main, Dual, and Split Voices as the Chorus Depth is.

The MIDI documentation for the PSR-E models is very brief, in contrast to the MIDI documentation for the PSR-S models and some of the older PSR models-- e.g., there's no information about which XG messages are recognized, which RPNs are available, or what Sequencer-Specific Meta-Events are available. I've discovered there are Sequencer-Specific messages which select and control the Style auto-accompaniment, but Sequencer-Specific messages (as with all Meta-Event messages) can't be transmitted, only used in MIDI files. It might be possible to use equivalent XG SysEx or RPN messages to control the Style externally, but I haven't found any equivalent messages yet.
Michael Rideout
Current keyboards: Yamaha YPT-400, PSR-E433, PSR-E443, PSR-EW400, MX49 BK
Current controllers: M-Audio Axiom 61-II
Previous keyboards: Farfisa Matador 611; Casio CTK-710
SiriusHardware
Member
Member
Posts: 30
Joined: Wed Dec 07, 2011 6:00 pm
Great Britain

Re: MIDI Voice bank changes in PSR E303

Unread post by SiriusHardware » Tue Sep 29, 2015 6:36 pm

SeaGtGruff wrote:Yes, the PSR-E303 uses XGlite, which is a reduced version of XG. Some of the extended abilities that were added to GM by GS and XG were later incorporated into GM2.
Until this conversation I didn't even know there was a GM2!
SeaGtGruff wrote: I need to correct something I'd said. GM2 uses Channels 10 and 11 for drum kits. But Yamaha uses Channels 9 and 10 for drum kits, which confused me. I take it this is more of a recommended standard than a requirement, since the ability to select a Bank and select a drum kit-- which was added in GS, XG, and GM2-- means Channel 10 is no longer limited to drums and you can select drums on any of the 16 Channels.
So noted, although, since all my own gear is pre-GM I've usually tended to stick to the 'legacy' tradition of having the drums on channel 16. However, if you reckon that the E303 gives priority to channels 9/10 on the assumption that these will be used for drums and therefore more time sensitive, then it makes sense to use those channels when using the E303.
SeaGtGruff wrote: ...you should be aware that messages sent to the PSR-E303 do not, for the most part, affect its panel settings-- e.g., if you send a Bank Select and Program Change on Channel 1, it won't change the Main Voice! The Main, Dual, and Split Voices are transmitted on Channels 1, 2, and 3, respectively, but are actually independent of the MIDI Channels. The PSR-E303 has 32 sound generators (i.e., 32-note polyphony) which are used as needed to play the requested sounds and notes.
This sounds like a similar situation to that of the old PSS795, one of which I recently added to my small collection. (I had frequent access to a PSS790 during my initial wave of interest in the eighties - the 795 is the same instrument with a few important MIDI features either fixed or improved). You can treat one of those, essentially, as a displayless 32-note polyphonic multitimbral tone module. Sounds like the E303 is similar.
SeaGtGruff wrote: To hear only what's being sent by the DAW, turn off Local control.
Yes, that's my normal way of working with any synth(s) in conjunction with a computer based sequencer / DAW. The E303 has a fast shortcut to two different setups for use with a computer, 'PC1' and PC2' mode. These shortcuts automatically set up a number of MIDI parameters for PC/DAW work, including setting LOCAL to off.

Thanks for taking the time to list all the supported controllers - again, not only useful for me but for anyone who surfs onto this thread in future. In fact, this is rapidly turning into the unofficial MIDI supplement for the E-303, with the added bonus that it is in a human-readable format.
User avatar
SeaGtGruff
Global Moderator
Global Moderator
Posts: 672
Joined: Wed Jan 29, 2014 4:24 am
United States of America

Re: MIDI Voice bank changes in PSR E303

Unread post by SeaGtGruff » Tue Sep 29, 2015 11:59 pm

I didn't list all of the recognized controllers, just the ones that do something you can't do from the keyboard itself. The full list is in the "MIDI Implementation Chart" in the manual. The controllers I didn't list are Bank Select (CC#0 and CC#32), Channel Volume (CC#7), Sustain (CC#64), and Chorus Depth (CC#93).

I don't know the order of precedence for all of the MIDI Channels. When I say Yamaha uses Channels 9 and 10 for drums, I'm really referring to Yamaha Style files, which use the following Channel assignments:

Channel 9 = Sub Rhythm
Channel 10 = Rhythm
Channel 11 = Bass
Channel 12 = Chord 1
Channel 13 = Chord 2
Channel 14 = Pad
Channel 15 = Phrase 1
Channel 16 = Phrase 2

The order of preference (if that's what it's called) is relevant only in situations where two or more MIDI events are supposed to be simultaneous-- i.e., supposed to occur on the same tick as each other. If you want to override the default order of preference and use Channel 16 (or some other Channel) for the drums, you could just make sure the events for the drum channel always occur right on a beat (or half-beat, etc.), but delay the events for the other channels by 1 or more ticks. A DAW or sequencer will typically "quantize" all events to whatever resolution you specify, such as automatically positioning them at the start of the nearest quarter note, eighth note, sixteenth note, etc. But once you've laid out all of your tracks in the piano roll editor, you can select the events for a given track/channel and shift them a bit as needed.
Michael Rideout
Current keyboards: Yamaha YPT-400, PSR-E433, PSR-E443, PSR-EW400, MX49 BK
Current controllers: M-Audio Axiom 61-II
Previous keyboards: Farfisa Matador 611; Casio CTK-710
Post Reply

Return to “Yamaha PSR E443/E433/E423/E413/E403/E303/E203”