Suggestion: Global transpose in filter

Suggestion for @brad: It would be great if we could control whether global transpose is applied before/after filters. Here’s one way it could be done with minimal code change:

The Key Range filter could have an extra dropbox offering three options:

A. No global transpose (default)
B. Apply global transpose
C. Apply global transpose negated

This would allow users to apply the global transpose at arbitrary points in the filter chain, and even “undo” and “redo” the global transpose before/after any filter in the chain.

[Aside: I suggest making this addition to Key Range not Transpose filters because Key Range makes Transpose obsolete. In fact, if you wanted to consolidate some code, Transpose could probably be replaced with a Key Range filter that defaults to full key range.]

1 Like

Interesting idea.

Are you talking about MIDI filters on routes? Routes have an option to ignore global transpose - maybe you can use that to trick it into doing what you want?

Yes, sorry for not being clearer.

Although routes have an option to ignore global transpose, there’s currently no way to make a filter happen before global transpose gets applied except by chaining multiple routes in sequence (which gets very convoluted), and no way to “undo” the global transpose once global transpose has been applied along a route.

Example: I carefully prepare a song with various MIDI filters (key-splits, velocity ramps, etc.) for playing in the key of C, but when I arrive at the venue the vocalist informs me that she’s decided to sing it in Bb. I smile amiably and adjust my global transpose to -2, but discover that now all my key-splits are in the wrong places (because the transpose is applied before the filters). So I frantically race to find all pitch-dependent filters and adjust them for Bb (while mentally cursing the habitual capriciousness of singers).

The feature I suggested could solve the above by allowing us to add global transpose as the final filter on a route (or somewhere in the middle), plus it would enable some cool new things:

Hypothetical example: Using the new feature, I prepare a song in which each key-split filter is preceded by a filter that applies the negation of the global transpose, and succeeded by one that reapplies the global transpose. This changes the effect of the global transpose so that it moves all my key-splits without changing note pitches. When the vocalist informs me that her large older brother is replacing her and wants a key of low-G, I smile amiably, adjust my global transpose to -5 to change all my key-splits, and simply play it in G.

(The above examples may or may not have been inspired by actual events.) :slight_smile:

1 Like

Or… since I’ve discerned that @brad is the type of programmer who loves code beauty and symmetry… I shall shamelessly appeal to his sense of code completeness…

Everything on the MIDI route settings page has an equivalent filter or binding via which users can fine-tune the order of operations… except, alas, global transpose, which gets a sad face:

Adding it as an option within Key Range filters would complete the picture, affording order-customization of all route settings. :slight_smile:

1 Like

In case @brad might be interested in adding new features, I’d like to again recommend this idea from last year: The Key Range filter needs an option to add the global transpose or its negation to pitched events passing through the range.

Here’s a mock-up of what it might look like:

Every time I use Cantabile I wish it had this filter option, since without it there’s no way to customize where in a filter chain the global transpose gets applied.

–Kevin

4 Likes

Thinking about this some more I’m wondering if this would be better added to the transpose filter. The reason being that on the key range filter it’s a little unclear if the transpose is being added before or after the key range selection - and you may want it either side.

By making this an explicit and adding it to transpose filter that can be placed anywhere in the filter list removes that ambiguity.

What do you think?

Welcome back, Brad!

Adding it to the Transpose filter would work okay, but I recommended adding it to the Key Range filter because the Transpose filter is obsolete. Key Range does everything that Transpose does, plus more. Adding the new feature to Key Range would therefore continue to centralize all transposition options in a single filter, whereas adding it to Transpose would force users to use a combination of Transpose and Key Range filters to get access to all the options.

To me, adding it to Key Range is no more or less unclear than the transpose option that Key Range already has. Users seem to understand how that transpose works; my suggestion merely changes how much the notes get transposed, not when or under what conditions.

–Kevin

I’ve implemented this for the next build. It’s available on both the transpose filter and the key range filter, with three options: Ignore, Apply or Remove.

3 Likes

Just finished my first performance using this new filter option, and can confirm that it’s such a game-changer. It’s now possible to craft songs in which the transpose button selects which key I’m playing in without changing the output notes. So rather than maintaining 12 copies of a keysplit-laden song – one for each possible key I might need to play it in – I can maintain a single copy of the song whose keysplits can be moved anywhere by merely adjusting the transpose. And not just keysplits – it can retarget autochords, arps, velocity ramps, everything. So nice!

Thanks, Brad!

1 Like

Hi Kevin,

This sounds great. Can you post an example of one instance of this application and where you placed the filters and how you set them. I was wondering if they were on the input routes to the plugs or from the output routes of the sequenced style plugs or both. Thanks for any input you can give. :slight_smile:

Dave

Hi Dave,

Sure, here’s a typical example.

Suppose I have a song designed to be played in C, and I play the bass+pads in the left hand and the melody+lead in the right hand. So I have a keysplit at middle-C, like the following:

But I want to be prepared to play this song in other keys, in which case I’d want the keysplit to be at the tonic of the desired key. To support arbitrary keys, I can now add a “remove global transpose” just before the keysplit, and a “apply global transpose” just after it, as shown:

With these two filters added, if I change the global transpose to +2 (i.e., I want to play it in D), my keysplit moves to middle-D, because the first filter “removes” the global transpose (transposing a D down to a C), then the keysplit is applied, then the final filter re-applies the global transpose (transposing the note back to D, but leaving it in its new channel).

So now I can play the song in any key. I just set the global transpose to whichever key I want, and all my keysplits move appropriately. The same trick works with all pitch-dependent filters (sandwich them between opposite global transpose filters), all midi-transforming plugins (put opposite global transpose filters on their input and output midi routes), etc.

–Kevin