View Issue Details

IDProjectCategoryView StatusLast Update
0001148OpenMPTFeature Requestpublic2018-10-08 21:16
ReporterLPChip Assigned To 
PrioritylowSeverityfeatureReproducibilityN/A
Status newResolutionopen 
Platformx64OSWindowsOS Version10
Summary0001148: Global effects
Description

Introduction

This idea is borrowed from EnergyXT, where I discovered how this feature works and thought, oh, this would be so cool in OpenMPT.

In EnergyXT you can add an effect as an Insert, and as a Send. The insert works the same as how OpenMPT does it. The VSTi outputs to a plugin, then to the next, and finally to the mixer, and this chain is exclusive to that VSTi (unless you manually route it differently)

The sends are different though. When you insert an effect here, an extra parameter has to be set, which by default is set to 0% and can be set all the way up to 100%, which is a wet/dry ratio slider. When you insert a send, it is available to all channels, and can be enabled for one instrument by simply adjusting the wet/dry ratio slider.

The request

What I'd like to see is the following; In the plugins section, you have a new checkbox near the master checkbox named Global. When this checkbox is checked, the Master checkbox is grayed out, the Output to: FX yy is also grayed out, as well as the new section for global plugins (more on that coming next).

In addition, a combobox (or whatever works best) plus a wet/dry slider is added. This is for the global plugins, so this is grayed out if you check global.

The combobox holds a list of all plugins that are set as global followed by their dry/wet ratio value indicated by a number from 0% to 100%. (more on that later).

I don't know how easy it is, but if it is possible to get all inputs of a plugin, then I'd love to have each input listed in this combobox. This would allow anyone to use a side-chain compressor in OpenMPT and assign something to the side-bus, by selecting that input and give it a value higher than 0%, preferably 100%. If this is possible, then the combobox would also name the input.

An example of what the combobox could look like:

FX35 - Compressor - MAIN (0%)
FX35 - Compressor - Input 2 (100%)
FX49 - Equalizer - MAIN (25%)
FX56 - AMP - MAIN (0%)

As soon as you make a selection with the combobox, the slider's value is updated with the value stored for that effect, and changing the slider updates the wet/dry value for that entry.

Routing

Rather than forwarding the output of a plugin to the next plugin in the chain, routing occurs as follows:

A plugin that is not a global plugin will process the audio first by itself. It then goes through all the global plugins to see if any of the plugins have a wet/dry value higher than 0% (it skips those that are 0%, obviously). If it finds one or more plugins with a wet/dry value higher than 0%, the audio is routed to that plugin, the plugin's effect is captured, and is mixed back with the output of before it was sent to that plugin.

Once all global plugins are processed, the plugin forwards its output to the next plugin in the chain. Here's an ascii representation of what the chain processing looks like:

+-----------+     +-----------------+     +-------------+
|FX1: VSTi  |-->--| Global effects  |-->--|FX2: VST     |
+-----------+     +-----------------+     +-------------+
                   |               |
                   | +-----------+ |
                   | |FX40:   0% | |      <- skipped
                   | +-----------+ |
                 +-V-------------+ |
                 |    FX41: 100% | |      <- applied, audio replaced
                 +-V-------------+ |
                   |              /|\
                 +-V-------------+ |
                 |    FX42:  20% | |      <- applied, audio mixed
                 +-V-------------+ |
                   |               |
                   +---------------+

+-----------+     +-----------------+     +-------------+
|FX2: VST   |-->--| Global effects  |-->--|OUT          |
+-----------+     +-----------------+     +-------------+
                   |               |
                   | +-----------+ |
                   | |FX40:   0% | |      <- entire chain skipped
                   | +-----------+ |
                   | +-----------+ |
                   | |FX41:   0% | |
                   | +-----------+ |
                  \|/             /|\
                   | +-----------+ |
                   | |FX42:   0% | |
                   | +-----------+ |
                   |               |
                   +---------------+

As you can see, it is possible for a global plugin to be used more than once in a plugin chain. This is perfectly fine and does not require any error handling. Its like the same plugin is added twice in the chain. Of course, it is by design that if many plugins output to the same global plugin, all audio is mixed in that plugin. So many sounds to the same AMP will create a distorted sound. That is totally by design. Otherwise, you could not create side chaining.

This would also mean that you can limit the amount of effects used to reduce overall CPU usage.

TagsNo tags attached.
Has the bug occurred in previous versions?
Tested code revision (in case you know it)

Activities

There are no notes attached to this issue.

Issue History

Date Modified Username Field Change
2018-10-08 21:15 LPChip New Issue
2018-10-08 21:16 LPChip Description Updated