Using filters to target 14 bit PB message - Hats Off to Dave Dore

I’m trying to get a specific pitch bend message to the target. The source controller only gives access to 7 bit messages, with 0-127 values available. The Cantabile monitor does read them as 14 bit messages with, potentially, all 16,384 values presented.
If I wanted to get, say, any input of 1280 to be 1285, is there any filter which can achieve this? I have tried to find a way but, so far, access to those values in a filter seems to be unavailable. I also looked for way using the good ol’ PIZ midi plugins.
Any ideas?
TIA

Hi Adrian,

I was experimenting with playing a pedal steel plugin live. I wanted to do bends with foot pedals and ended up using Bome Midi Translator Pro which has the 16,384 pitchwheel resolution.

Doug

2 Likes

Thanks for that suggestion, Doug. Bome seems to have been the MIDI fix all for years but I never got to it because inserting another layer of software seemed a little more cumbersome than an integrated, or plug-in, solution. If there’s nothing else that can handle this type of conversion, I’ll go for it.
:+1:t2::+1:t2:

Hi Ade,

I’m curious, did you seek a ratio based solution or a constant offset. I didn’t quite get it.

Thanks,

Dave

I’m trying, not very successfully, to compensate for a pitch bend calibration error between the source and the destination. I don’t care so much about what happens during the travel, but I want it to arrive at a precise value. Say I’m supplying 12288 decimal, and I want every occurrence of that to be 12296, while passing on any other pitch bend data unchanged. If the physical wheel is guaranteed to supply 12288 when full up, I want the transformer, whether it be Bome or whatever, to grab that 12288 and supply 12296. Can Bome achieve that, do you think?
Appreciate your input on this :slightly_smiling_face:
Thanks!

Hi Adrian,

If I understand correctly then I think Cantabile can do it albeit using a few tricks. I made this with the assumption it was for a full range input so you may need to modify for a value less than 16384. I also made it so you could isolate any number between 0 and 16384 and reassign it. I noticed that on Cantabiles control bar Pitch bend virtual controller it had only 6,000 or so increments so there was a lot of space between increments (50) so it didn’t cause a rewrite conflict. I tested by finding 12,851 was a definite sent value and changed it to 12,896 for my test. I made a linked rack that holds the filters and bindings to make it happen but I made it so you could pick out any number between 0 ~ 16384 Pitch Wheel positions and isolate it so you can assign a new value to it while removing that value from the rest of the range you want to leave the same as it is.

To do this I used cascading MIDI input filters and 2 sets of bindings situated in a linked rack with an embedded rack inside it.

image

Inside the linked rack you find the first filter set that routes to the embedded rack 1. The first filter converts the Pitch bend to Controller Fine (0~16384).

The second one converts the exact number entered into the From: boxes to the exact number on theTo: boxes.

and on the same level these bindings that route also to the embedded rack 1. The first one isolates the range from 0 to the number just below the number I loaded in the From: boxes in the filters above and the second covers the range from the number just above the From: number up to the max 16,384. Note the the bindings out of range mode is set to discard for both bindings.

inside the embedded rack you find the second filter. It converts the Controller fine numbers we manipulated back into Pitch bend messages and sends them to the rack MIDI out.

MIDI Mon before rack filters

MIDI Mon after rack filters

Pitch Bend Calibrate.cantabileRack (21.0 KB)

I hope that using the methods I used here you can cobble together what you need.

Cheers,

Dave

8 Likes

Wow! I can’t wait to check this out. What a community
:smiley:

What a Dave Doré :slightly_smiling_face:

1 Like

Indeed! Very creative. The idea of breaking out from the pitch bend data would definitely have eluded me. Excellent, Dave :+1:t2::+1:t2::+1:t2:

Hi there Dave,
Well it works beautifully.
I have calibrated the required intervals. Each one requires a separate filter.


For some reason this approach does not work.
PB no good
I think it’s something to do with the Discard Out Of Range function, which must be looking at the whole controller type and not simply the targeted values? What do you think?
Regardless, this works GREAT!!
Thank you a lot for your lateral thinking. :+1:

2 Likes

Hi Adrian,

Glad you worked it all out!! I was hoping it would fill the need. You are right about the Discard being the reason you can’t stack in the same filter. Due to the need to block all but the one conversion with the filter it was the right choice. Clamping or Sliding both produced a stream of the same conversion messages whenever you move the wheel so not good. Your solution is exactly the correct extension of the general idea so I am very happy you have a working thing. :slight_smile:

Cheers,

Dave

1 Like