feat: integrate MixerEngine into AudioHost real-time audio pipeline

When SetMixerEngine() is called with a MixerEngine instance, the
audio processing thread routes all device input/output channels
through the mixer (channel strips → buses → master) instead of
the legacy Lv2Pedalboard. Falls back when no mixer engine is set.

- Thread-safe via mutex + realtime raw pointer swap (same pattern
  as existing SetPedalboard)
- Preserves existing pedalboard processing — both modes coexist
- New ProcessLv2Pedalboard() path when realtimeActiveMixerEngine
  is non-null uses device buffers directly for multi-channel I/O
This commit is contained in:
2026-06-20 14:06:46 -04:00
parent df5a317ceb
commit 0422c91b4e
2 changed files with 45 additions and 0 deletions
+6
View File
@@ -37,6 +37,8 @@
namespace pipedal
{
class MixerEngine; // forward declaration for band-in-a-box mode
struct RealtimeMidiProgramRequest;
struct RealtimeNextMidiProgramRequest;
class PluginHost;
@@ -239,6 +241,10 @@ namespace pipedal
virtual void SetPedalboard(const std::shared_ptr<Lv2Pedalboard> &pedalboard) = 0;
/// Set the mixer engine for band-in-a-box mode.
/// When set, overrides the legacy pedalboard processing.
virtual void SetMixerEngine(const std::shared_ptr<MixerEngine> &mixerEngine) = 0;
virtual void SetControlValue(uint64_t instanceId, const std::string &symbol, float value) = 0;