Make the Module On Parameter More Performance-Oriented
in progress
Nikolozi
I received interesting feedback from a Mela user who created a complex and very interesting MIDI preset, and it got me thinking about some of the required changes that can address some shortcomings that have also been bothering me. At the moment, the On parameter is very utilitarian, but it can be optimised to be more performance-oriented.
Below are some proposed changes.
Add a visual indicator about an On parameter's current state when modulated
- Currently, an On parameter might look like it’s in an off state, but a modulation might have the state flipped.
- There’s no way to know this, and the UI will look disabled in that scenario.
- Solution: add a visual indicator showing the modulated state and don’t dim/disable the module UI.
Turning off a module should no longer completely bypass its engine
- At the moment, when a lane or a module is turned off, the UI is dimmed, the parameters can no longer be changed via UI, and modulations no longer update.
- Solution: No longer bypass the engine (specific details below) and don’t dim/disable the module UI.
- Small downside is the module will continue to use some CPU because even when bypassed, it still updates UI and runs some DSP. But that's ok because most likely the user has the module around, so they can unbypass it as needed.
MIDI Processors should no longer auto-release notes
- Currently, if an Arpeggiator or Euclid module receives a C3 note-on, and then the user bypasses the module before receiving the corresponding note-off message, the module will automatically send out a C3 note-off message to prevent stuck notes.
- Now, the issue with this is, the user might still be holding down the C3 key.
- Solution:On bypass, Arpeggiator and Euclid simply finish playing their last note(s) and don’t start another note, and they will send out note-on messages for the currently held notes. i.e. in the example above, on bypass C3, note-on will be sent out. That way, when the user finally releases C3, that’s when C3 will stop playing.
MIDI Processors update output on parameter change without changing input
- Currently, some MIDI Processor modules don’t change output if parameters are updated and the input hasn’t changed.
- For example, if the Chord module settings are adjusted, the output won’t change for the currently held notes. The change will happen only after the input is changed.
- Solution Part 1:The Chord module should update its output as soon as the note On parameters change. This will allow chord building in real time.
- Solution Part 2 (unlikely a good idea):The Chord module should update its output as soon as the Pitch value changes. I’m less sure about this.
- (Vel parameter changes causing the output to the Chord module output to change don’t seem useful at all. Retriggering notes in this case seems like a bad idea.)
- Continuing on the Solution Part 2, if we go ahead with that, maybe it means things like Note Range and Transposer should also update their outputs as the range or transposition amount changes. Again, I'm not certain this is a good idea.
Audio/Pitch Processors crossfade their outputs when the On parameter is toggled
- Currently, when turning an Audio Processor on or off, there’s an audible click, e.g. VA Filter, this is because audio switches instantly.
- It’s not a big deal if it’s just trying things out and isn’t automating or modulating the On parameter as part of a song or performance.
- But if you do want to automate and modulate or even tap on the On toggle during performance would be great if it didn’t click.
- Also, there’s another issue related to the DSP being turned off for oscillator and LFO modules. The phasor no longer updates. This means if you turn the oscillator off, next time you turn it on, its relative phase would have changed against other modules. The resync will happen on the next note-on event.
- Solution:Turn the On parameter from a simple on/off 2-state list into a continuous one with [0%, 100%] range and make it crossfade like a wet/dry mix.
- This means the parameter can be modulated and automated, and will change its value between on and off continuously.
- It will also be clickless when tapping on it, as there will be a quick 20ms crossfade.
- For simplicity, it will continue to be a Mono target, meaning it won’t support Poly modulation.
Nikolozi
Some related ideas, listing them here for now
- All Toggle and PopUpList parameters should have modulation indicators.
- Enable a mode on a parameter, including Dials and Sliders, where it displays the modulated value. This is especially useful for cases where the value changes slowly and the user is controlling modulation in real-time with an external controller. (e.g. Note Range parameters).
- Drag-and-Drop target modulation Edit Modulation features should work on Toggles and PopUpLists.
- Arpeggiator’s Mode (maybe it should be called a Pattern) should offer an Off value. Where it will simply stop generating patterns.
- This was discussed with Jon in other threads, but I’m considering adding the Macro Button, where it will only be in the On state while the button is being touched.
Nikolozi
Since the On parameter will no longer disable module's process code and have any effect whether its downstream signal is Mono or Poly, it makes sense to remove the On parameters from certain modules to reduce any confusion. Here's the list so far:
- Correlation
- MIDI-to-Poly
- Poly-to-Mono
- MIDI Capture
- Meter
- Voice Activity
- Pitch Oscilloscope
- Oscilloscope
Nikolozi
While working on implementing the crossfading functionality for Pitch/Audio Processors I realised Groups' and Stacks' On parameters need to have special behaviour. Crossfading doesn't make sense. For example, if a lane (aka a root-level Group module) is turned off, what does crossfading even mean?
Solution:
If a Group or Stack is turned off, it means all its submodules are turned off. And since the On parameter has become a continuous value, the effective value of a submodule's On parameter will be the minimum value of the parent and self. For example, if a Group's On is at 75% and a submodule's at 90%, the submodule will behave like it's at 75%.For other modules with sublanes, like Effect, the crossfade approach will work great.
Nikolozi
in progress
The suggested solutions will be implemented over several updates.
Nikolozi
Some related ideas, listing them here for now
- All Toggle and PopUpList parameters should have modulation indicators.
- Enable a mode on a parameter, including Dials and Sliders, where it displays the modulated value. This is especially useful for cases where the value changes slowly and the user is controlling modulation in real-time with an external controller. (e.g. Note Range parameters).
- Drag-and-Drop target modulation Edit Modulation features should work on Toggles and PopUpLists.
- Arpeggiator’s Mode (maybe it should be called a Pattern) should offer an Off value. Where it will simply stop generating patterns.
- This was discussed with Jon in other threads, but I’m considering adding the Macro Button, where it will only be in the On state while the button is being touched.