]> git.sesse.net Git - nageru/blobdiff - audio_mixer.h
Write 1.4.0 changelog.
[nageru] / audio_mixer.h
index 71f36629341f54a6151d33469271efd6361ccbce..85f9aedf96a77779b31e3e9a5433710076659208 100644 (file)
@@ -8,19 +8,19 @@
 //
 // 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"
@@ -30,6 +30,8 @@
 #include "resampling_queue.h"
 #include "stereocompressor.h"
 
+class DeviceSpecProto;
+
 namespace bmusb {
 struct AudioFormat;
 }  // namespace bmusb
@@ -67,6 +69,9 @@ public:
        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.
@@ -114,6 +119,8 @@ public:
        MappingMode get_mapping_mode() const;
        InputMapping get_input_mapping() const;
 
+       unsigned num_buses() const;
+
        void set_locut_cutoff(float cutoff_hz)
        {
                locut_cutoff_hz = cutoff_hz;
@@ -279,6 +286,7 @@ public:
        // 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;
@@ -365,6 +373,7 @@ private:
        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 }};