// Copyright (c) 2026 Ourpad Network // See LICENSE file in the project root for full license text. #pragma once #include #include #include namespace mixer { /// Types of buses in the mixer architecture. enum class MixerBusType { Master, // Main L/R output — end of signal chain Subgroup, // Named subgroup (Drums, Guitars, Vocals...) Aux, // Aux send bus (monitor mix or FX send) FxReturn, // Stereo return from a shared FX processor (reverb, delay) }; /// Channel type classification for mixer channel strips. enum class MixerChannelType { Instrument, // guitar, bass, keys — expects amp modeling Mic, // vocal mic — expects compressor, EQ, reverb chain Line, // line-level input (backing tracks, synths, drum machines) AuxReturn, // return from external FX processor }; /// Configuration for a single aux send on a channel strip. struct AuxSendConfig { float level = -96.0f; // dB, -96 ≈ -inf (effectively off) bool preFader = false; // true = pre-fader (monitor send), false = post-fader (FX send) int64_t targetBusId = -1; // bus ID this sends to bool isActive() const { return level > -90.0f && targetBusId >= 0; } }; /// Per-channel high-pass filter configuration. struct HpfConfig { bool enabled = false; float frequency = 80.0f; // Hz }; /// Routing entry: a source (channel or bus) feeds a target bus with a level. struct MixerRouteEntry { enum SourceType { SourceChannel, SourceBus }; SourceType sourceType; int64_t sourceId; // channel instanceId or bus ID int64_t targetBusId; // the bus being fed into float level = 0.0f; // dB }; /// Describes a mapping from a mixer bus to physical output channels. struct MixerOutputRoute { int64_t sourceBusId; // Bus to route from int sourceStartChannel; // Starting channel on the bus (0=L, 1=R) int targetStartChannel; // Starting physical output channel int channels; // Number of consecutive channels to route (1 or 2 typically) }; /// A complete snapshot of the mixer state for save/restore. struct MixerSnapshot { struct ChannelState { int channelIndex; float volume; float pan; bool mute; bool solo; MixerChannelType channelType; std::string label; bool hpEnabled; float hpFrequency; std::vector auxSendLevels; // indexed by aux bus index }; struct BusState { int64_t id; std::string name; MixerBusType type; float volume; bool mute; }; std::vector channels; std::vector buses; std::vector routes; }; } // namespace mixer