|
Post by carneyweb on Apr 10, 2018 17:29:01 GMT
Hello everyone.
I just bought MidiFire as a way to route midi from an EWI controller connected to my IOS device through an iConnectMIDi4+ to several hardware MIDI modules.
One of the things I'd like to be able to do is have a "Scene" setup all the hardware by sending program changes to the appropriate ports/channels. Is there a way to configure MidiFire to do this?
Thanks for any info.
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Apr 10, 2018 17:42:10 GMT
Hi carneyweb , Yes, this is done using the Stream Byter. It's (relatively) easy. Here are the steps: 1. Make sure the MIDI destinations you want to send the program changes to are on the canvas. 2. Drop a Stream Byter onto the canvas. Connect it's output to all the hardware ports. You can leave the Stream Byter's input disconnected. 3. Use the cog to open up the Stream Byter and you then add some SND rules inside an IF LOAD to send program changes when the scene is loaded. Here are some examples: # issue program changes # rules inside IF LOAD are # executed when a scene loads IF LOAD SND C0 00 # CHAN 1, PC 0 SND C1 07 # CHAN 2, PC 7 SND C2 1A # CHAN 3, PC 26 SND CF 2B # CHAN 16, PC 43 ENDWhen you press the 'Install Rules' button, it will then send your program changes straight away. Handy for testing your work. When you're done, save to a scene and when the scene is recalled, the routings are setup first and then the Stream Byter will fire its program changes automatically. If you want to send scene changes on different channels then you adjust the C0 part of the message to C1 for channel 2, C2 for channel 3 all the way up to CF (it's a hex number) for channel 16. To change the program change number that gets sent out, you adjust the second byte of the SND message. It's a hex value from 00 to 7F (decimal 0 to 127). If you have, say multiple hardware units listening on the same channel but you want to send them different programs, then create separate Stream Byters and connect accordingly. If you also need bank select, let me know. Regards, Nic.
|
|
|
Post by carneyweb on Apr 10, 2018 18:09:22 GMT
That's outstanding. Thanks!!!
Yes... I'll need bank select also :-)
|
|
|
Post by carneyweb on Apr 10, 2018 18:11:55 GMT
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Apr 10, 2018 19:49:09 GMT
Hi carneyweb , Bank select is a little different. You need to send 2 separate messages of 3 bytes per bank select. These would also go inside the IF LOAD and the bank select messages should be before the program change messages. This is a handy bank select reference but here are some examples. (Note: there are 16384 different banks) # bank select 0, channel 1 B0 00 00 B0 20 00
# bank select 5, channel 2 B1 00 00 B1 20 05As for rewriting that harmonizer software in Stream Byter - I suspect that might be somewhat too complex. ;-) (It's not something I'm likely to write a MidiFire module for really either; it's more a standalone app - maybe Johan wants to port his ideas to iOS?) Regards, Nic.
|
|
|
Post by carneyweb on Apr 12, 2018 14:55:34 GMT
Thanks again!
If I'm decoding things correctly,
B#: The "B" stands for "Bank Select", and the # is "channel number minus one" The first argument (column): controller number in hex (00 = MSB, 20 = LSB) The second argument (column): value to send to the controller
So, if I wanted to send Channel 5 a bank select with MSB 87 and LSB 2, I'd send:
# Select bank 87,2 on channel 5 B6 00 57 # 87 = 5*16 + 7 B6 29 02 # 2 = 0*16 + 2
Is that correct?
Then, the total setup for an instrument on channel 5 would look something like this:
IF LOAD # Select bank 87,2, PC 23 on channel 5 SND B6 00 57 # 87 = 5*16 + 7 SND B6 29 02 # 2 = 0*16 + 2 SND C6 17 # CHAN 5, PC 23 END
Right?
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Apr 12, 2018 15:01:11 GMT
Hi carneyweb , Your hex/MSB/LSB numbers are spot on. However, CC on MIDI channel 5 would be B4 and the second bank select message is always B0 20, so adjusted slightly: B4 00 57 B4 20 02Regards, Nic.
|
|
|
Post by carneyweb on Apr 12, 2018 15:04:04 GMT
OK. Right... duh. So, do I have to use the SND command (like in my updated post above with the full example) - Mike.
|
|
|
Post by carneyweb on Apr 12, 2018 15:04:59 GMT
So, the final LOAD block would look like this: IF LOAD # Select bank 87,2, PC 23 on channel 5 SND B4 00 57 # 87 = 5*16 + 7 SND B4 20 02 # 2 = 0*16 + 2 SND C4 17 # CHAN 5, PC 23 END
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Apr 12, 2018 15:05:31 GMT
Yes, you need the SND (and inside an IF LOAD).
Regards, Nic.
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Apr 12, 2018 15:06:15 GMT
But change that B4 29 to B4 20!
|
|
|
Post by carneyweb on Apr 12, 2018 17:09:43 GMT
Yes! Thanks again!
- Mike.
|
|