]> git.sesse.net Git - nageru/blobdiff - audio_mixer.cpp
Store an input mapping, and show it in the UI.
[nageru] / audio_mixer.cpp
index 06c7f870fcae75203eb75749ebf8c568e44d5bf9..15c65de53566d2c776b2b6096e82af2f21cf9c9a 100644 (file)
@@ -59,6 +59,16 @@ AudioMixer::AudioMixer(unsigned num_cards)
        set_compressor_enabled(global_flags.compressor_enabled);
        set_limiter_enabled(global_flags.limiter_enabled);
        set_final_makeup_gain_auto(global_flags.final_makeup_gain_auto);
+
+       // Generate a very simple, default input mapping.
+       InputMapping::Input input;
+       input.name = "Main";
+       input.input_source_type = InputSourceType::CAPTURE_CARD;
+       input.input_source_index = 0;
+       input.source_channel[0] = 0;
+       input.source_channel[1] = 1;
+
+       input_mapping.inputs.push_back(input);
 }
 
 void AudioMixer::reset_card(unsigned card_index)
@@ -227,11 +237,11 @@ vector<float> AudioMixer::get_output(double pts, unsigned num_samples, Resamplin
        // something we get out per-sample.
        //
        // Note that there's a feedback loop here, so we choose a very slow filter
-       // (half-time of 100 seconds).
+       // (half-time of 30 seconds).
        double target_loudness_factor, alpha;
        double loudness_lu = loudness_lufs - ref_level_lufs;
        double current_makeup_lu = to_db(final_makeup_gain);
-       target_loudness_factor = from_db(-loudness_lu);
+       target_loudness_factor = final_makeup_gain * from_db(-loudness_lu);
 
        // If we're outside +/- 5 LU uncorrected, we don't count it as
        // a normal signal (probably silence) and don't change the
@@ -241,7 +251,7 @@ vector<float> AudioMixer::get_output(double pts, unsigned num_samples, Resamplin
        } else {
                // Formula adapted from
                // https://en.wikipedia.org/wiki/Low-pass_filter#Simple_infinite_impulse_response_filter.
-               const double half_time_s = 100.0;
+               const double half_time_s = 30.0;
                const double fc_mul_2pi_delta_t = 1.0 / (half_time_s * OUTPUT_FREQUENCY);
                alpha = fc_mul_2pi_delta_t / (fc_mul_2pi_delta_t + 1.0);
        }
@@ -259,3 +269,33 @@ vector<float> AudioMixer::get_output(double pts, unsigned num_samples, Resamplin
 
        return samples_out;
 }
+
+vector<string> AudioMixer::get_names() const
+{
+       vector<string> names;
+       for (unsigned card_index = 0; card_index < num_cards; ++card_index) {
+               const CaptureCard *card = &cards[card_index];
+               unique_lock<mutex> lock(card->audio_mutex);
+               names.push_back(card->name);
+       }
+       return names;
+}
+
+void AudioMixer::set_name(unsigned card_index, const string &name)
+{
+       CaptureCard *card = &cards[card_index];
+       unique_lock<mutex> lock(card->audio_mutex);
+       card->name = name;
+}
+
+void AudioMixer::set_input_mapping(const InputMapping &input_mapping)
+{
+       lock_guard<mutex> lock(mapping_mutex);
+       this->input_mapping = input_mapping;
+}
+
+InputMapping AudioMixer::get_input_mapping() const
+{
+       lock_guard<mutex> lock(mapping_mutex);
+       return input_mapping;
+}