VSTi Vibrato

Started by Saga Musix, July 09, 2012, 17:02:51

Previous topic - Next topic

Saga Musix

Starting with OpenMPT 1.20.02.01 (that's sadly one version after the official release from last Saturday! :D), it is possible to use the standard Hxx/Kxx or 4xx/6xx effects to send vibrato to VSTis. How does this work and what do you have to keep in mind?

Vibrato is implemented through the pitch wheel, so first off the VSTi that you want to apply vibrato on must support pitch wheel messages. Many plugins do that, and if you can use Exx/Fxx effects with that plugin, it will also support Hxx.

The vibrato scale has been chosen so that it is absolutely identical to sample-based vibrato if the pitch wheel depth is set to +/- 2 semitones. This is the default setting for many synths. Many synths allow you to change the pitch wheel depth either through their GUI, a VST parameter and / or through MIDI CCs. The default MIDI CC sequence used to control the pitch wheel depth is "Bc6400 Bc6500 Bc06z" - you can set up a MIDI macro for this and then use Z00... Z7F to configure the pitch wheel depth (the parameter should translate directly to semintones, so Z02 would set a pitch wheel depth of +/- 2 semitones).
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.

LPChip

Me wants, Me wants! :)

Nice Saga Musix, really nice. :)
"Heh, maybe I should've joined the compo only because it would've meant I wouldn't have had to worry about a damn EQ or compressor for a change. " - Atlantis
"yes.. I think in this case it was wishful thinking: MPT is makng my life hard so it must be wrong" - Rewbs

Saga Musix

A build to try out is available under the same address as always: http://sagagames.de/stuff/mptrack.exe
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.

Saga Musix

OpenMPT 1.20.02.10 has changed VSTi vibrato behaviour a bit; To reduce headaches when using VSTi portamento and vibrato, they can now be translated directly to sample portamento / vibrato commands if the "Pitch Wheel Depth" parameter in the instrument editor is set correctly. As an example, if your plugin's Pitch Wheel Depth is set to 5, you would set the Mod Instrument's Pitch Wheel Depth also to 5 to make portamento (Exx / Fxx) and Vibrato (Hxx / Uxx) commands work correctly.

Since the early days of OpenMPT, portamento commands have been very quirky and their bend range was not well defined. For compatibility, the old behaviour is still available for tunes made with these old versions.
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.

Harbinger

Hmmm...when thinking about it, this is actually a BIG step for ModPlug. I would even say this feature is reminscent of sequencer software behavior that took an instrument's PW depth into account when applying vibratos or pitch bends.

This ability to customize command behavior based on plugins used is hopefully a new trend in implementation of some static, standard functions. As soon as someone puts together a standard manual for using, choosing, and editing MIDI CC sequences (all those that MPT can apply), we will have come a long way into command customization.

Some suggestions on other functions/FX commands that can be customized like this?  ???

Saga Musix

Quote from: Harbinger on September 20, 2012, 21:07:58
As soon as someone puts together a standard manual for using, choosing, and editing MIDI CC sequences (all those that MPT can apply)
What do you mean, "can apply"? OpenMPT can send any MIDI CC to plugins. The question is not which CCs can be applied to MPT, the question is which CCs are understood by which plugin! And I can assure you that a "standard manual" in this regard would be a hopeless thing to create, because MIDI CCs are hardly standardized and virtually every plugin uses a different set of MIDI CCs (or none at all). The MIDI CC names that can be found in OpenMPT's dropdown list are those defined by the General MIDI standard, but no plugin that doesn't claim to be GM-compatible needs to support them. That also means that the CC sequence for changing the pitch wheel depth will only work on a few plugins supporting the GM standard to some extent, and this is not something that OpenMPT (or any other DAW, for that matter) can influence, nor something that should be found in OpenMPT's manual, but instead in the plugin's manual.
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.

Harbinger

Perhaps i should have said "all those that we know of that MPT can apply". You have sprinkled in various posts some usable commands like the one above --
QuoteThe default MIDI CC sequence used to control the pitch wheel depth is "Bc6400 Bc6500 Bc06z"
but i'm left with the sense that there is a whole library of commands that YOU know about but we haven't found. And where would we look for them. I understand that each MIDI device has its own recognizable commands (MIDI messages), but how do i find out what a given synth will understand? For example, where did you find that command sequence? Is it a result of trial-and-error? That tome of knowledge is what i'm talking about...

Now a "MIDI Implementation chart" for any given synth and some VSTs can tell us what messages a synth will recognize, but if my synth recognized a setting for the Pitch Wheel depth, where would i have found that particular hex sequence you gave us above? THAT's the help we need... ???

Saga Musix

QuotePerhaps i should have said "all those that we know of that MPT can apply". You have sprinkled in various posts some usable commands like the one above
It is already documented that there are two types of MIDI messages - internal ones (I have listed all existing internal macros on the aforementioned manual page) and external ones, which vary from synth to synth.

Quotewhere would i have found that particular hex sequence you gave us above? THAT's the help we need...
"Bc6400 Bc6500 Bc06z" might look like a magic command that I have made up somehow, but really it's just three consective MIDI CCs - MIDI CC 64h, 65h and 6h - these three together are a Registered Parameter Number (RPN), which changes the pitch wheel depth in sfz. I have not found any other synths that could use this CC combination (not even my hardware synths). I have also just found this information by using a search engine.
Now if you use the Zxx Setup dialog, there is already a preset called "MIDI CC..." and there you can select the appropriate CC from the dropdown list. This gives you the sequence "BcXXz" for a given command XX. Now all I did was joining three MIDI CCs into one macro - you could use three macros for the same task but that's of course just wasteful. So if a synth manual says you that parameter X can be controlled by CC Y, you simply select this command Y from the dropdown list. If it says that parameter x is controlled by a sequence of CCs, you assemble this sequence of CCs by the same method as before.  There's really no big knowledge of MIDI messages required (though it is highly useful of course, luckily there are not many types of MIDI messages), all you need is being able to handle dropdown lists. :D
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.

Harbinger

Quote from: Saga Musix on September 28, 2012, 21:44:18"Bc6400 Bc6500 Bc06z" might look like a magic command that I have made up somehow, but really it's just three consective MIDI CCs - MIDI CC 64h, 65h and 6h - these three together are a Registered Parameter Number (RPN), which changes the pitch wheel depth in sfz. I have not found any other synths that could use this CC combination (not even my hardware synths).

Even i learned some things when i saw the edited/emended version of the macro page from the OHM now in the Wikipages. I had apparently not made clear (and was probably unclear myself) that there are set macros, which you can choose from in the Macro Manager, and custom macros, which is what it looks like you've created with the above Bc series. My question, which i think is eluding you, is how did you know to use that notation? And how do you "combine" them? I'm guessing you're using a custom macro, but i can't see how you string them together -- unless you do it the hard way and enter three different SFx/Zxx values in a pattern. We could use a little tutorial at the bottom of the macro page, which you linked to, to show us how to do what you did.

Sadly, i'm not at my MPT at home, so i'm going from memory on how you construct macros...

Saga Musix

Quotehow did you know to use that notation?
Well, "back then when I had no clue how this stuff works", I simply selected the MIDI CC preset to generate the three messages. Back it was also not possible to bind one macro to multiple messages, so I simply used three different macros (which can be done, but is obviously much more clumsy). When I rewrote the macro stuff, I simply joined the three MIDI macros into one and replaced the "z" in the first two by "00", because the parameter for those two must be 0 (previously, I would have used Z00 Z00 Z0C in the pattern for example, now Z0C is enough). This step should be easy to understand with the built-in macro help or wiki page, which tells you that "z" is the Zxx parameter.

QuoteAnd how do you "combine" them? I'm guessing you're using a custom macro
From the manual:
QuoteYou can even configure a single macro to change a number of parameters at once. For example, you could set a plugin's first parameter to 0 and its Dry/Wet ratio to 50% (F0F08000 F0F00340).
And from the built-in macro help:
QuoteMacros can be up to 31 characters long and contain multiple MIDI messages.

Maybe this should be clarified further, but I thought both statements would make clear that you can join multiple MIDI messages (such as these three MIDI CCs) by simply writing them one after another. I have even separated them with space characters in my example to make it visible that this is more than just one MIDI messages, although technically these space characters are ignored. So this is really just three standard macros joined together and the first two macro's parameter set to 0, that's all "custom" about it.
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.