]> git.sesse.net Git - nageru/blobdiff - audio_mixer.cpp
Add a benchmark for a simple audio chain; easier than profiling all of Nageru.
[nageru] / audio_mixer.cpp
index 3b7d3e5821eb2fd1c4343de8a245a603165fcb20..8d09ad3bfa9a279f5d74af38613503ce835311e8 100644 (file)
@@ -555,15 +555,23 @@ void AudioMixer::send_audio_level_callback()
        double loudness_range_low = r128.range_min();
        double loudness_range_high = r128.range_max();
 
-       vector<float> bus_loudness;
-       bus_loudness.resize(input_mapping.buses.size());
-       for (unsigned bus_index = 0; bus_index < bus_r128.size(); ++bus_index) {
-               bus_loudness[bus_index] = bus_r128[bus_index]->loudness_S();
+       vector<BusLevel> bus_levels;
+       bus_levels.resize(input_mapping.buses.size());
+       {
+               lock_guard<mutex> lock(compressor_mutex);
+               for (unsigned bus_index = 0; bus_index < bus_r128.size(); ++bus_index) {
+                       bus_levels[bus_index].loudness_lufs = bus_r128[bus_index]->loudness_S();
+                       bus_levels[bus_index].gain_staging_db = gain_staging_db[bus_index];
+                       if (compressor_enabled[bus_index]) {
+                               bus_levels[bus_index].compressor_attenuation_db = -to_db(compressor[bus_index]->get_attenuation());
+                       } else {
+                               bus_levels[bus_index].compressor_attenuation_db = 0.0;
+                       }
+               }
        }
 
-       audio_level_callback(loudness_s, to_db(peak), bus_loudness,
+       audio_level_callback(loudness_s, to_db(peak), bus_levels,
                loudness_i, loudness_range_low, loudness_range_high,
-               vector<float>(gain_staging_db, gain_staging_db + MAX_BUSES),
                to_db(final_makeup_gain),
                correlation.get_correlation());
 }