Monkeyfarm
2016-06-10 21:57:48
Hello everyone.
I have one very simple requirement from Bome. I need to convert the absolute CC messages from my APC40 to a relative mode I can use in Reaper's learn.
1) Yes, I know there are several posts on the forum about the APC, but they all seem to deal with the LED's etc, which i have covered via Reaper sending MIDI.
2) Yes, I know there are posts about absolute>relative, but I can't figure out where to begin to try them, and I can never get very far before Bome trial timer expires on me. If Bome can't do this one thing I need, or put another way, I can't get it through my dense brain without spending a month learning Bome, then I'll need to look elsewhere.
So I'm going to be one of "those" people on a forum. Yes, I hate myself for this, and I freely admit I'm being "lazy" even though I've already spent like 4+ hours with the trial trying to figure this out...
With all that out of the way...
For those that don't know, the APC40 (first gen) has rotary encoders that are 1) endless physically, 2) only send continuous data (0-127), but helpfully (based on posts I've read about this) once you hit a limit like 0 or 127, because the encoders physically are endless, it will keep sending a 0 or 127.
So, can some kind soul please tell me in steps even I can understand how I can set up a translation so that ALL CC's on ALL channels from my APC40 will be converted from absolute to a relative mode Reaper can understand (1=-1:127=+1 OR 63=-1:65=+1, etc.)?
So I get that in a pseudo-code manner it's like this:
CC_val(CC.Channel) = current value of CC read by Bome when I twiddle a knob. [** Sticking point: how do I do this for multiple channels... i.e. CC20 on CH1, CC20 on CH2, etc?]
Old_CC_Val(CC.Channel) = last read value [** Sticking point** I don't get how you deal with the initial "Instance" of a read... As when you start out, there's not an "old" value to compare with...]
New_CC_Val(CC.Channel) = "Converted" CC value for the CC/Channel combo in question
Assuming 63:65 mode
If CC_val(CC.Channel) > Old_CC_Val(CC.Channel) : New_CC_Val(CC.Channel)= 65
If CC_val(CC.Channel) < Old_CC_Val(CC.Channel) : New_CC_Val(CC.Channel)= 63
Endpoint cases
If CC_val(CC.Channel) = 127 : New_CC_Val(CC.Channel)= 65
If CC_val(CC.Channel) = 0 : New_CC_Val(CC.Channel)= 63
I kind of got one CC on one channel to work based on what I've read on the forum and via Google searches, but I don't understand how to write it so it will work on all CC's (all status bytes for CC's) on all Channels (all status bytes for CC's) ?
There's got to be a more elegant solution that writing potentially 1600 individual translators to cover all the CC's on 16 channels, right? Some kind of loop, conditional, or array, or something?
If I can get this to work, I'll buy Bome in a heartbeat
I have one very simple requirement from Bome. I need to convert the absolute CC messages from my APC40 to a relative mode I can use in Reaper's learn.
1) Yes, I know there are several posts on the forum about the APC, but they all seem to deal with the LED's etc, which i have covered via Reaper sending MIDI.
2) Yes, I know there are posts about absolute>relative, but I can't figure out where to begin to try them, and I can never get very far before Bome trial timer expires on me. If Bome can't do this one thing I need, or put another way, I can't get it through my dense brain without spending a month learning Bome, then I'll need to look elsewhere.
So I'm going to be one of "those" people on a forum. Yes, I hate myself for this, and I freely admit I'm being "lazy" even though I've already spent like 4+ hours with the trial trying to figure this out...
With all that out of the way...
For those that don't know, the APC40 (first gen) has rotary encoders that are 1) endless physically, 2) only send continuous data (0-127), but helpfully (based on posts I've read about this) once you hit a limit like 0 or 127, because the encoders physically are endless, it will keep sending a 0 or 127.
So, can some kind soul please tell me in steps even I can understand how I can set up a translation so that ALL CC's on ALL channels from my APC40 will be converted from absolute to a relative mode Reaper can understand (1=-1:127=+1 OR 63=-1:65=+1, etc.)?
So I get that in a pseudo-code manner it's like this:
CC_val(CC.Channel) = current value of CC read by Bome when I twiddle a knob. [** Sticking point: how do I do this for multiple channels... i.e. CC20 on CH1, CC20 on CH2, etc?]
Old_CC_Val(CC.Channel) = last read value [** Sticking point** I don't get how you deal with the initial "Instance" of a read... As when you start out, there's not an "old" value to compare with...]
New_CC_Val(CC.Channel) = "Converted" CC value for the CC/Channel combo in question
Assuming 63:65 mode
If CC_val(CC.Channel) > Old_CC_Val(CC.Channel) : New_CC_Val(CC.Channel)= 65
If CC_val(CC.Channel) < Old_CC_Val(CC.Channel) : New_CC_Val(CC.Channel)= 63
Endpoint cases
If CC_val(CC.Channel) = 127 : New_CC_Val(CC.Channel)= 65
If CC_val(CC.Channel) = 0 : New_CC_Val(CC.Channel)= 63
I kind of got one CC on one channel to work based on what I've read on the forum and via Google searches, but I don't understand how to write it so it will work on all CC's (all status bytes for CC's) on all Channels (all status bytes for CC's) ?
There's got to be a more elegant solution that writing potentially 1600 individual translators to cover all the CC's on 16 channels, right? Some kind of loop, conditional, or array, or something?
If I can get this to work, I'll buy Bome in a heartbeat