tom
Converser

Posts: 15
|
Post by tom on Jun 11, 2014 17:10:05 GMT
Hi Nic, I got recommended to you by eccecello through the loopy forum. I'm playing live guitar using a FCB1010 with loopy. I tend to make my songs technically complicated. Now my FCB1010 is starting behave weird on me and sometimes sends a double PC message when pressed. When this happens playing live this will mess up my song a lot, and mostly just have to start over. I wondered if it is possible to cancel any second PC command within a certain timespan. And if so, do i have to program this per switch, or can this made global? Also, after reading through the forum, i got quite excited about the possibility of a long press action too. Would these 2 thing interfere with each other? Tom
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jun 11, 2014 18:35:10 GMT
Hi Tom,
How close together do those PC events get sent?
I *may* have a way of doing this but I would need to protoype first since I'm not certain it is going to work. My cunning plan would be global for all PCs but might interfere with the hold functionality. Indeed it may not work at all.
Let me play around tomorrow (my time) and see if I can do it. I don't want to get your hopes up - I'm not sure this will work but it might. Or while I am trying this I might think of another way. Leave it with me and I'll post back with the solution or a 'sorry no go'.
Regards, Nic.
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jun 11, 2014 20:16:50 GMT
I couldn't resist trying out my plan... it works, I'm pleased to say. Here is what I did:
We are going to hijack channel 16 for our internal use. This means that you must not allow the FCB to send any events on channel 16.
Also my original question about how close the PCs are is still relevant. If MidiBridge can't switch modes quickly enough then dupes could get through. You'll just have to see.
Other assumptions before you start:
- FCB is set to send program changes on channel 1 - FCB is connected - MidiBridge scenes 000 and 001 are empty or it is OK to overwrite - All apps/devices you generally use are connected and routed
1. In MidiBridge Preferences set 'Scene Channel' to 16 2. Touch the 'beaker' icon on the FCB input (left) and press Stream Byter accessory arrow, press 'On' and paste the following:
# FCB fix part 1 C0 = BX X2 7F # map PC to temp CC for hold BF = CF 00 +H1000 # revert to scene 0 after 1 sec BF = C0 X2 # rewrite temp CC back to PC C0 = CF 01 +C # switch to block scene CF = XX +B # block internal PC
3. Press Done/Done and go to scenes panel and hold down scene 000 and save it (name it 'PC Allow')
4. Return to the Stream Byter on FCB input port and remove the rules and replace with just:
# FCB fix part 2 CX = XX +B # block all PCs
5. Press Done/Done and hold down scene 001 and save (name it 'PC Block') 6. Finally press the 'Load' button on scene 0 to load it in readiness to block dupe PCs (hopefully they are not too close together)
This is how it works:
- When a PC comes in on channel 1 from the FCB it sets a hold event for 1 second and immediately switches to scene 1 - Scene 1 blocks further PCs from passing through - When the timer expires, Scene 0 gets selected again and awaits the next PC - to change the amount of time before the scene auto-switches back adjust the rule with +H1000 and change the 1000 (1 second) to whatever suits.
BTW, this is completely bananas, but if it works who cares.
Regards, Nic.
|
|
tom
Converser

Posts: 15
|
Post by tom on Jun 12, 2014 7:16:32 GMT
Hi Nic, Thanks for your quick reply! I like the way you think. So i bought your app, went carefully through the instructions, but so far it's not working. It seems it won't change the scene when a PC message is read. I assume, when on the interface tab, i will see the scene number change for 1 sec when a PC message is read(the red balloon number on top of "scenes". Also, when connecting the "iRig MIDI in" to any output in the "interfaces" tab, the red balloon at scenes shows a "0!". And in tab "Scenes" the 000 PC Allow will turn red. After pressing load, the connection in "interfaces" is lost. (no line) I copy pasted your code, so i could not have made any typos. (I wish i understood the code) And the FCB1010 does send on channel 1, and scene channel is on 16.
The time between the PC events varies from 10ms - 100ms. Although, i noticed that i also get PC commands when de-pressing the switch. This usually occurs around 200 - 250ms. While playing guitar and pressing multiple pedals i use a speed of about 300ms. So a setting of 280ms and learn to use short foot presses should do the trick.
I like bananas solutions! Thanks a lot! Tom
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jun 12, 2014 8:57:27 GMT
Hi Tom,
Second question first about the lines disappearing and the exclamation mark.
If a scene is active and you change something like a routing or a module change then the balloon will show an exclamation mark next to the scene number. This indicates that the scene is changed and unsaved, so if a new scene is loaded all changes will be lost. The strategy is whenever you make a change and see the exclamation, hold down the current scene in the scene panel and press the Save button. That's the reason why I suggested setting up all your routings first before you save the scenes for the first time. As long as you keep on saving your changes into the current scene you should be fine.
I manually copied the rules from my iPad to here, so maybe there is a mistook. Yes, there is! D'oh! Change the first rule so:
C0 = BF X2 7F # map PC to temp CC for hold
That rule is meant to remap the incoming program change temporarily to a fake controller on channel 16 (which we hijacked). The original rule was preserving the channel, so just change that first X to F and that should be it.
Regards, Nic.
|
|
tom
Converser

Posts: 15
|
Post by tom on Jun 12, 2014 14:12:29 GMT
Now that explains. And it works! Beautifully! For about 2 minutes. Then it gets stuck on scene 1. I've tested it 5 times in a row. Whether i give many or few presses, run Midibridge in the background and look at Midi monitor, after about 1:30 - 2:30 minutes it stops working. When i, after this, try to manually load the 000 PC allow scene, it will jump back to scene 001 after the first footswitch press, and get stuck there again. I have to fully restart the app to get it working again for another 2 minutes.
It looks very promising so far!
|
|
tom
Converser

Posts: 15
|
Post by tom on Jun 12, 2014 14:22:20 GMT
Nope, i have to correct myself, i seems dependant on the amount of messages send/footswitch presses. It seems there is a limit on how many presses i can do.
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jun 12, 2014 16:23:42 GMT
I knew it was going to be bananas.
The reason it stops after n (64) PC messages is because the concurrent hold buffer inside MidiBridge is only that large and since we are never issuing a CC off for our fake hold messages, the buffer fills up and then everything stops..
We need to free up those slots once expired with a CC off message somehow.
This is where it gets even more tricky. I have a couple of ideas but I'm going to need to ponder on this one and try some experiments.
Leave it with me and I'll revert with any news when I can.
Regards, Nic.
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jun 13, 2014 8:53:37 GMT
Having slept on it, I have a solution. Here is a new set of rules to try in the 'PC Allow' scene:
# FCB fix part 1 C0 = BF X2 00 # map PC to temp CC OFF for hold BF = FE +H1 # fake hold to clear out slot for this PC BF = XX X2 7F # convert temp CC to ON BF = CF 00 +H280 # revert to scene 0 after 280 msec BF = C0 X2 # rewrite temp CC back to PC C0 = CF 01 +C # switch to block scene CF = XX +B # block internal PC
That should no longer fill up the hold slots.
Regards, Nic.
|
|
tom
Converser

Posts: 15
|
Post by tom on Jun 14, 2014 4:04:39 GMT
You're brilliant! It works beautifully. This needs to be shared, as it stabilises the workflow of loopy a lot. Even non defective switches sometimes get an (user faultive) double press. This is a live safer. Thank you.
So, to make the story complete, is it possible to do the following long press function? Upon downpress, the midibridge waits for the time given, then sends either only command X(before time limit) or Y(after time limit), depending of the duration of the press. So command X will be send when the press is released within time, and Y will be send when the time limit is up.
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jun 14, 2014 14:31:37 GMT
Hi tom,
I think you'll find that when the FCB is sending program change messages, then the PC is sent on the down press but nothing is sent on release. I don't have an FCB myself but it is how other footpedals seem to work.
You probably need to switch the FCB to use control change numbers instead of program changes so that you can block the release controller event in the 'PC Allow' scene if that is what you want to do as well has do different things upon press and release of the button.
Careful rule configuration is needed though since it seems that you want to use the +H hold function as a standard hold as well as using it to get around the double-ups your device is sending. This could end up as being banana splits. :-)
Regards, Nic.
|
|
tom
Converser

Posts: 15
|
Post by tom on Jun 15, 2014 4:29:56 GMT
Yes, any programming written in scene 1 will be disabled for the given amount of time after a pc command. I understand its bananas. The only way to have the FCB send a message on press release is using midi notes. So i set up a switch that only sends midi note 127, or CH1 G octave 10 on and off messages (with a velocity of 1% as i wish to use a keyboard too). This way it wont interfere with the pc holding function, and loopy nicely picks up both note on and off messages. Its the lower row of switches on the FCB that gave me a hard time. The upper row is still available for this hold function.
So would this be programmable?
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jun 16, 2014 9:18:13 GMT
Hi Tom,
Before I start figuring this all out, let me see if I understand this correctly.
The lower row are the ones that do the nasty double events but you want to leave those as is (program changes) with the fast scene switch to prevent the double ups.
The top row you want to setup so that you can use the Stream Byter hold function by configuring the FCB to send notes on/off on switch down/up. If you press the switch momentarily it will send event A only but if you hold the switch it will send event B but not event A?
Have I got that right?
Let me know and I will see if I can concoct something. I think for this to work event A would be sent when you release the switch not when you depress the switch which if you are just 'tapping' it shouldn't be too much of a problem.
Regards, Nic.
|
|
tom
Converser

Posts: 15
|
Post by tom on Jun 16, 2014 10:04:30 GMT
Hi Nic, Thats correct. Upon downpress nothing is send. Upon release before the given time A will be send. And when still pressed until the time is up, B will be send. I think this will work better than sending B upon release of the switch.
|
|
nic
Soapbox Supremo  
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jun 16, 2014 11:39:12 GMT
OK, this turns out to be a bit complex. I'm not in a position to test this right now, so I am going to post my solution untested and you are welcome to try it out in case I got it right first go (unlikely). If it doesn't work, then I will work on it later when I can.
You need to program the 5 top buttons as follows in your FCB:
Button 1 send note on 123 velocity 1 on press, note off on release Button 2 - 124, 3 - 125, 4 - 126, 5 - 127
I have created the rules to send program changes 118 to 122 when the switches are held > 1 sec or program changes 123 - 127 if the switch is released before 1 second.
You will need to create a third scene at slot 002 in a similar vein to PC Block scene. I have called this 'Hold Active'
OK, here is what you add to the current ruleset in the PC Allow (slot 000) scene
# top 5 button hold (or not) magic 9X 7B-7F 00 = 8X # always force note offs 9X 7B-7F = CF 02 +C # switch to Hold Active scene on note on 9X 7B-7F = CF 00 +H1000 # auto return to scene 0 after 1sec NX 7A = C0 7A +H1000 # schedule hold/trigger NX 7B = C0 7B +H1000 # schedule hold/trigger NX 7C = C0 7C +H1000 # schedule hold/trigger NX 7D = C0 7D +H1000 # schedule hold/trigger NX 7E = C0 7E +H1000 # schedule hold/trigger
And here are the rules for the new 'Hold Active' (slot 002) scene
# hold active logic 9X 7B-7F 01-7F 01 = XX +B # block trigger note ons 9X 7B-7F 00 = 8X # always force note offs NX 7B-7F = FE +H1 # inert hold event to ensure holds cancel on note off 8X 7B-7F = CF 00 +C # note off, immediately return to scene 0 8X 7B-7F = CX # note off, issue PC
The theory behind this is as follows:
- When one of the buttons is depressed (note on, velocity 1) then we switch to the hold active scene for a maximum 1 second - We also schedule a hold event to trigger a program change event at the 1 second mark per note on
Once the 'Hold Active' scene is running then
- if we see a trigger note off, then we cancel all the hold events (including auto scene change) send the non-hold program change and finally switch back to scene 000 immediately.
There are some considerations with this strategy:
- You can only hold one switch at a time (I think) - If you play notes on a keyboard that pass through the Stream Byter in the range of notes 123-127 then I'm not sure what will happen
I'd say try that out and let me know what happens - ie. test it for me :-)
Regards, Nic.
|
|