X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=audio_mixer.h;h=c332671e0bebd6f385d66b8ddc40fd426fd765ad;hb=1062c5403b57859c219558e736564a3d0bbecfd5;hp=88c2f880cac0fee500d087abec37d1ff9eed1230;hpb=c3a08ff6100840205d295a58d6bf340aa20afde0;p=nageru diff --git a/audio_mixer.h b/audio_mixer.h index 88c2f88..c332671 100644 --- a/audio_mixer.h +++ b/audio_mixer.h @@ -52,6 +52,13 @@ struct DeviceInfo { unsigned num_channels; }; +enum EQBand { + EQ_BAND_BASS = 0, + EQ_BAND_MID, + EQ_BAND_TREBLE, + NUM_EQ_BANDS +}; + static inline uint64_t DeviceSpec_to_key(const DeviceSpec &device_spec) { return (uint64_t(device_spec.type) << 32) | device_spec.index; @@ -111,6 +118,12 @@ public: return locut_enabled[bus]; } + void set_eq(unsigned bus_index, EQBand band, float db_gain) + { + assert(band >= 0 && band < NUM_EQ_BANDS); + eq_level_db[bus_index][band] = db_gain; + } + float get_limiter_threshold_dbfs() const { return limiter_threshold_dbfs; @@ -239,6 +252,7 @@ private: void reset_resampler_mutex_held(DeviceSpec device_spec); void reset_alsa_mutex_held(DeviceSpec device_spec); std::map get_devices_mutex_held() const; + void apply_eq(unsigned bus_index, std::vector *samples_bus); void update_meters(const std::vector &samples); void add_bus_to_master(unsigned bus_index, const std::vector &samples_bus, std::vector *samples_out); void measure_bus_levels(unsigned bus_index, const std::vector &left, const std::vector &right); @@ -257,6 +271,7 @@ private: std::atomic locut_cutoff_hz; StereoFilter locut[MAX_BUSES]; // Default cutoff 120 Hz, 24 dB/oct. std::atomic locut_enabled[MAX_BUSES]; + StereoFilter eq[MAX_BUSES][NUM_EQ_BANDS]; // The one for EQBand::MID isn't actually used (see comments in apply_eq()). // First compressor; takes us up to about -12 dBFS. mutable std::mutex compressor_mutex; @@ -290,6 +305,7 @@ private: InputMapping input_mapping; // Under audio_mutex. std::atomic fader_volume_db[MAX_BUSES] {{ 0.0f }}; float last_fader_volume_db[MAX_BUSES] { 0.0f }; // Under audio_mutex. + std::atomic eq_level_db[MAX_BUSES][NUM_EQ_BANDS] {{{ 0.0f }}}; audio_level_callback_t audio_level_callback = nullptr; mutable std::mutex audio_measure_mutex;