|
Post by lesndes on Oct 8, 2014 19:02:47 GMT
Hi Nic,
For some strange reason, garageband implements different instruments with different key ranges (i.e middle C on the keyboard is C4 on the piano but C3 on the organ. That makes it difficult to stay in synch with other synths (I use BS-16i) without it being an octave above or below. I solved this by creating a scene to handle the transposition using the note mapper. But the problem was hanging notes when switching back and forth. I solved that with a streambyter rule like so: N2 3C = 82 30 00 +C +D2000. I had to have a separate rule for each note in the range. Works great to eliminate hanging notes. But I can't figure out how to only apply that rule when the scene is first invoked. What happens is each time an octave is played, the note off event is triggered and cuts off the lower note of the octave. Is there some way around this? I'm stumped!
Thanks, lesndes
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Oct 9, 2014 9:05:49 GMT
Hi lesndes, Crucial question first: Are you changing scenes via the MidiBridge Scenes Panel or are you changing them via a MIDI program change message? It might be worth taking a step back and figuring out a way to send all notes off to synths that are about to be (or have just been) disconnected. Do you just have two separate scenes - one for GB and one for bs-16? Regards, Nic.
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Oct 9, 2014 9:10:19 GMT
Ah, I just went back and looked at your other thread. You say GB won't honour all notes off. It looks like you are switching scenes via MIDI program change but maybe you could confirm that.
How are you getting around the problem that GB listens to all ports on all channels in the system? Surely it is always playing no matter what you do in MidiBridge as it will pick up events from your controller directly. Or are you using a non CoreMIDI controller such as Line6 Midi Mobilizer I?
Regards, Nic.
|
|
|
Post by lesndes on Oct 9, 2014 11:34:31 GMT
1) I am switching scenes via program change ( using an FCB1010) 2) I am using a Line 6 Midi Mobilizer 1 plus only ALLOWING channel 3 on the midi bridge virtual output
My scenes are 1) bs-16i off / gb off 2) bs-16i off / gb on 3) bs-16i on / gb off 4) bs-16i on / gb on 5) bs-16i on / gb on transpose up 1 octave 6) bs-16i off / gb on transpose up 1 octave
Thanks for your help. This is a mind bender for me!
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Oct 9, 2014 11:49:49 GMT
OK, got it. Let me go away and experiment and get back to you. Probably take me a day or so.
Regards, Nic.
|
|
|
Post by lesndes on Oct 10, 2014 1:13:32 GMT
No problem. Thanks so much for your help.
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Oct 10, 2014 10:58:50 GMT
Hi lesndes, Doing a bit of experimentation. Can you confirm that your transposing note mapper is on the MidiBridge output port (on right)? You are quite right about GB not honouring all notes off - what a pain. Regards, Nic.
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Oct 10, 2014 11:48:53 GMT
OK, I have had some more thoughts on this. I think it is going to be extremely difficult.
Essentially we would like to turn off all notes in the full range of the synth we are about to disconnect but not if the synth is going to stay connected.
First problem is that GB won't respond to all notes off so we are forced to send 128 note off messages to it to be sure, to be sure.
Second problem is we do not know which synths are going to remain and which synths are going to be disconnected since we can't look ahead and see what routings there are in the ensuing scene. You may be limited in the sequence of scenes you select or you may need to re-arrange your scene order so that all scenes with GB off are in one contiguous lump and all scenes with bs16 off in another lump. ie. the current scene needs to be setup with knowledge of the next scene you are going to use or we lump certain types of scene together logically so we only need to write 128 note off events. Not sure how well I have explained this.
For example, when you issue a program change from the controller connected to the MMZ we can look for this and do stuff:
# on program change lump A (00-03) send notes # off over entire range on CH 3 (GB) CX 00-03 = 82 00 00 +C +D1000 # ... (repeat for notes 01 to 7E) CX 00-03 = 82 7F 00 +C +D1000
The notes off should issue to any connected synth before the scene change. Lump 'A' means whenever we see a scene change coming switching to scenes 1,2,3,4 it is only then that we need issue the full range notes off. For bs16 we don't need to send 128 note offs - just an 'all notes off' like:
# on program change lump B (04-07) send # all notes off on CH 2 (bs16) CX 04-07 = B2 7B 00 +C +D1000
So lump 'A' is all scenes where GB is disconnected and lump 'B' is all scenes where bs16 is disconnected. I guess lumps could be overlapping where noth are disconnected.
That's the gist of how I could see it working, but I'm not 100% sure how practical this is going to be. I wonder if this is just too complex even for MidiBridge and the Stream Byter?
Regards, Nic.
|
|
|
Post by lesndes on Oct 10, 2014 21:23:51 GMT
Thanks, Nic...
I'll try to look at this over the weekend and see what comes out. Yes, the transposing note mapper is on the output side.
|
|
|
Post by lesndes on Oct 15, 2014 0:04:20 GMT
Hi Nic,
I finally got around to putting in your code. Seems to work like a charm! Thanks for your help.
|
|