//
// All operations on AudioMixer (except destruction) are thread-safe.
-#include <math.h>
+#include <assert.h>
#include <stdint.h>
+#include <zita-resampler/resampler.h>
#include <atomic>
+#include <functional>
#include <map>
#include <memory>
#include <mutex>
#include <set>
+#include <string>
#include <vector>
-#include <zita-resampler/resampler.h>
-#include "alsa_input.h"
#include "alsa_pool.h"
-#include "bmusb/bmusb.h"
#include "correlation_measurer.h"
#include "db.h"
#include "defs.h"
#include "resampling_queue.h"
#include "stereocompressor.h"
+class DeviceSpecProto;
+
namespace bmusb {
struct AudioFormat;
} // namespace bmusb
float get_fader_volume(unsigned bus_index) const { return fader_volume_db[bus_index]; }
void set_fader_volume(unsigned bus_index, float level_db) { fader_volume_db[bus_index] = level_db; }
+ bool get_mute(unsigned bus_index) const { return mute[bus_index]; }
+ void set_mute(unsigned bus_index, bool muted) { mute[bus_index] = muted; }
+
// Note: This operation holds all ALSA devices (see ALSAPool::get_devices()).
// You will need to call set_input_mapping() to get the hold state correctly,
// or every card will be held forever.
// or set_* functions for that bus.
struct BusSettings {
float fader_volume_db;
+ bool muted;
bool locut_enabled;
float eq_level_db[NUM_EQ_BANDS];
float gain_staging_db;
MappingMode current_mapping_mode; // Under audio_mutex.
InputMapping input_mapping; // Under audio_mutex.
std::atomic<float> fader_volume_db[MAX_BUSES] {{ 0.0f }};
+ std::atomic<bool> mute[MAX_BUSES] {{ false }};
float last_fader_volume_db[MAX_BUSES] { 0.0f }; // Under audio_mutex.
std::atomic<float> eq_level_db[MAX_BUSES][NUM_EQ_BANDS] {{{ 0.0f }}};
float last_eq_level_db[MAX_BUSES][NUM_EQ_BANDS] {{ 0.0f }};