nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Nov 24, 2018 18:39:47 GMT
Hi supadom, Yeah, I was getting note events. I don't have a BopPad but tested using external controller. Ooooh, is it sending on channel 10? Could be if it is a percussive instrument, I guess. Right at the very top of the script on the ASS K80 = B0 07 line, change that B0 to B9 and install those rules. Let me know if that helps. If not, then might need a bit more debugging... Regards, Nic.
|
|
|
Post by lukesleepwalker on Nov 26, 2018 2:39:57 GMT
Hi gents. Just back home and tried the latest.... It is working when I set the channel to 10 on the BopPad (each quadrant defaults to a different channel between 1-4). The problem with supadom’s constrained CC value experiment is that the BP doesn’t spread the four values across the whole “pizza slice”—instead, the four notes are stuck at the very tip of the pizza. Not very helpful. But the lookup table should work well across 1-127.
|
|
|
Post by lukesleepwalker on Nov 26, 2018 2:43:48 GMT
I'm gonna give this one a go:
# BopPad by audeonic
IF LOAD # constants - change these to suit
# K80 and 81 = incoming CC ASS K80 = B9 07
# K82 - retrigger timeout in ms # (set to 0 for no retrigger suppression) ASS K82 = 50
# K83 - channel pressure threshold # (turn current note off if pressure # falls below this value) ASS K83 = 0A
# K84 - fixed note velocity ASS K84 = 50
# lookup table for CC value - all 128 of them # specify 80 for no note on that CC value ASS K00 = 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ASS K10 = 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ASS K20 = 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ASS K30 = 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A ASS K40 = 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A ASS K50 = 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A ASS K60 = 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E ASS K70 = 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E
# variables - change at your own risk # L0 currently sounding note (none) and L1 timer ASS L0 = 80 T0 SET LB0 S-- END
# handle incoming CC IF M0 == K80 K81 # assume OK to trigger note ASS I0 = 1
IF K82 > 0 # update elapsed time MAT L1 = L1 + T0
# check timer, disable send if # not yet elapsed IF L1 < K82 ASS I0 = 0 END END
# check this CC value maps to a note IF KM2 == 80 ASS I0 = 0 END
# OK to send new note? IF I0 == 1
# is this a new note? IF KM2 != L0
# stop any currently sounding note IF L0 != 80 MAT I1 = K80 - 30 SND I1 L0 00 END
# send new note ASS L0 = KM2 MAT I1 = K80 - 20 SND I1 L0 K84 SET LB0 L0 +N END
END END
# handle channel pressure # (if sounding note) IF L0 != 80 IF MT == D0 IF M1 < K83 # stop currently sounding note MAT I1 = K80 - 30 SND I1 L0 00 ASS L0 = 80 SET LB0 S-- END END END
# block all incoming events XX = XX +B
|
|
|
Post by lukesleepwalker on Nov 26, 2018 2:46:58 GMT
Didn't work... :-(
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Nov 26, 2018 9:14:50 GMT
Hi lukesleepwalker, What happened? Did you reset the BopPad back to the full 127 range? Regards, Nic.
|
|
|
Post by lukesleepwalker on Nov 26, 2018 13:24:59 GMT
Yes, I reset the BopPad to the full 127 range. I can see the CC7 on Channel 10 appearing in my Event Monitor that is hooked up directly to the BP--and it's accurately increasing value as I tap toward the edge. But there's nothing showing up in the Event Monitor hooked up to the StreamByter. The SB is flashing red with each tap on the BP. I suspect there's something amiss with the script!
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Nov 26, 2018 14:14:53 GMT
Hi lukesleepwalker, You have an extra 2E in both of the last lines of the lookup table. Not sure why, but this has really confused my code. Remove a 2E from each of these lines and it might work - working for me! Regards, Nic.
|
|
|
Post by lukesleepwalker on Nov 26, 2018 14:29:49 GMT
That was definitely the problem. It's working great now... This is by far the best method I've tried so far; very clean between "bands" of notes. I'll have to play with it a bit more to see if I can optimize the three bands as the middle one is a bit "thin" relative to the other two right now. But, great success on my end--thanks, Nic!
|
|
|
Post by lukesleepwalker on Nov 26, 2018 14:39:00 GMT
I do have to change my playing style a little, as I find if I am deliberate and leave my finger on the BopPad just a little I'll get very clean notes playing. If I go a little faster and "jab" at it a bit (as is customary on a percussion pad) I'll sometimes get some double notes and ghost notes. I'll play with the sensitivity setting on BP to see if that cleans things up any.
But, in terms of the three notes playing predictably, it works wonderfully. This is where I landed:
# BopPad by audeonic
IF LOAD # constants - change these to suit
# K80 and 81 = incoming CC ASS K80 = B9 07
# K82 - retrigger timeout in ms # (set to 0 for no retrigger suppression) ASS K82 = 50
# K83 - channel pressure threshold # (turn current note off if pressure # falls below this value) ASS K83 = 0A
# K84 - fixed note velocity ASS K84 = 50
# lookup table for CC value - all 128 of them # specify 80 for no note on that CC value ASS K00 = 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ASS K10 = 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ASS K20 = 23 23 23 23 23 23 23 23 23 2A 2A 2A 2A 2A 2A 2A ASS K30 = 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A ASS K40 = 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A ASS K50 = 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A ASS K60 = 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E ASS K70 = 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E
# variables - change at your own risk # L0 currently sounding note (none) and L1 timer ASS L0 = 80 T0 SET LB0 S-- END
# handle incoming CC IF M0 == K80 K81 # assume OK to trigger note ASS I0 = 1
IF K82 > 0 # update elapsed time MAT L1 = L1 + T0
# check timer, disable send if # not yet elapsed IF L1 < K82 ASS I0 = 0 END END
# check this CC value maps to a note IF KM2 == 80 ASS I0 = 0 END
# OK to send new note? IF I0 == 1
# is this a new note? IF KM2 != L0
# stop any currently sounding note IF L0 != 80 MAT I1 = K80 - 30 SND I1 L0 00 END
# send new note ASS L0 = KM2 MAT I1 = K80 - 20 SND I1 L0 K84 SET LB0 L0 +N END
END END
# handle channel pressure # (if sounding note) IF L0 != 80 IF MT == D0 IF M1 < K83 # stop currently sounding note MAT I1 = K80 - 30 SND I1 L0 00 ASS L0 = 80 SET LB0 S-- END END END
# block all incoming events XX = XX +B
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Nov 26, 2018 14:51:07 GMT
Hi lukesleepwalker , Odd that you get artefacts when you jab. The timer is meant to prevent this. Try upping that value: ASS K82 = 50Try changing that 50 to 12C (300 ms) just for a laugh. Maybe I have that bit wrong too. Regards, Nic.
|
|
|
Post by lukesleepwalker on Nov 26, 2018 19:17:31 GMT
I changed the timer value as you suggested and I don't think I detected any difference. I can play with it a bit more later when I have more time. I did, however, note that changing the global sensitivity on the BopPad affects how "clean" the note triggers are. By setting the sensitivity around 50% (instead of the 80% I had been using), I noted a lot fewer "double notes".
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Nov 27, 2018 12:04:09 GMT
Hi lukesleepwalker , Maybe I have misunderstood how this unit works. I thought the CC7 that was being sent was independent from striking the pad (ie. it was a different action). Are we getting both the CC7 and note events from the BopPad simultaneously? Could the ghost/double notes be coming from the BopPad itself (via a different signal path) and not from the module? Regards, Nic.
|
|
|
Post by lukesleepwalker on Nov 27, 2018 13:24:19 GMT
Hi again, Nic. Yes, the BopPad can be configured to send out lots of MIDI information or very little. I did have the BP set to send out a note and CC7 in my experiments yesterday (each quadrant sent out a different note). I just turned off the note completely to see what would happen. Sure enough, in MidiFire, I can see just the CC7 values incoming. StreamByter converts the CC value into a note on faithfully--but doesn't send the note off until I hit the next note. But it has to be a different note than the one I previously sent. So, now, when I play the BP, I get nice clean notes but can't play a repeated pattern in one "band" of the quadrant--I can only plan a note in an adjacent "band" to get a note to sound. Obviously not the behavior we want but perhaps gives you info that is usable?
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Nov 27, 2018 13:49:24 GMT
Hi lukesleepwalker , Right, the note off won't be sent until you move to another note or the channel pressure falls below the threshold. When you stopped sending notes from the BP I guess that stops Channel Pressure also. I think you need to turn the notes back on to get the pressure. The module should block the note events, so if you are hearing them, then they must be arriving via another signal path to the sound generator from the BP. Regards, Nic.
|
|
|
Post by lukesleepwalker on Nov 27, 2018 14:56:38 GMT
Actually, I can send channel pressure independently of notes. I turned off both notes and channel pressure to see what would happen if I sent just the CC. Traveling today but will turn the channel pressure back on when I return home and report back on the results.
|
|