Multi-send (or a "send" effect) and sidechaining for mixer channels #4080
wareya
started this conversation in
Engine Core
Replies: 1 comment 1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
In real DAWs, it's common to want to split an audio signal down two paths and process them separately. For example, say you have a drum track, and you want to add reverb, but the only reverb effect you have has too much treble. You could lowpass it, but that would have an effect on the dry non-reverb drum sound too. In this situation, you would send drums to a drum channel, then send that drum channel to the master channel, but you would ALSO send the drum channel to a drum reverb channel, then add the lowpass and reverb effect to the drum reverb channel.
It's already possible to emulate multi-send on top of
AudioStreamGenerator
andAudioEffectCapture
, in fact I did it for filtered reverb on sound effects, but it's incredibly fragile, slow, and cumbersome, and it adds a random amount of latency. Having multi-send be built in would alleviate these problems (I think some small amount of latency on multi-sends is OK as long as it's deterministic).Next: sidechaining is a technique that build on top of multi-send functionality by letting a mixer channel's effects reference another mixer channel without actually putting it through the mixer channel itself. This is particularly useful for dynamic range compression, where you can e.g. automatically lower music or sound effect volume by 9db whenever there's activity on the audio channel, without having to write code that does so manually. This is related to multi-send because without some way to get the data from the voice channel to both the master channel and the music/sfx channel it's not really possible. Some DAWs (like FL Studio) hack it in on top of multi-send by letting you control the "send volume" of a connection while nevertheless allowing effects to access individual source channels to their current channel without the "send volume" being applied.
This would provide a lot of the functionality of a visual/nodegraph/patcher-based mixing system without having to implement an entirely new mixing architecture.
There are a lot of other different situations where you want to be able to use these features. The only real complications are ensuring a lack of cyclical send configurations (DAWs just reject connections that would create a cycle) and how sidechaining would work if implemented at all (there are a lot of different models and not all of them make sense for game engines).
Beta Was this translation helpful? Give feedback.
All reactions