diff --git a/lib/audio_compressor.c b/lib/audio_compressor.c index 5cef4ba5..8ed58dcd 100644 --- a/lib/audio_compressor.c +++ b/lib/audio_compressor.c @@ -248,3 +248,6 @@ const int16_t* audio_compressor_output(const struct audio_compressor* ac) { retu size_t audio_compressor_output_size(const struct audio_compressor* ac) { return ac ? ac->output_size : 0; } void audio_compressor_clear_output(struct audio_compressor* ac) { if (ac) ac->output_size = 0; } uint32_t audio_compressor_clip_count(const struct audio_compressor* ac) { return ac ? ac->clip_count : 0; } +float audio_compressor_gain_db(const struct audio_compressor* ac) { + return ac && ac->configured && ac->enabled ? 20.0f * log10f(ac->gain_smoothed) : 0.0f; +} diff --git a/lib/audio_compressor.h b/lib/audio_compressor.h index 196b975f..30c6e55f 100644 --- a/lib/audio_compressor.h +++ b/lib/audio_compressor.h @@ -47,6 +47,8 @@ void audio_compressor_clear_output(struct audio_compressor* ac); /* Число сэмплов, обрезанных по потолку int16 (клиппинг) с момента create/reset. */ uint32_t audio_compressor_clip_count(const struct audio_compressor* ac); +/* Текущее фактическое усиление в дБ; выключенный compressor возвращает 0. */ +float audio_compressor_gain_db(const struct audio_compressor* ac); #ifdef __cplusplus } diff --git a/src/chat/chat_setting.c b/src/chat/chat_setting.c index b1e547b1..a61f5f7f 100644 --- a/src/chat/chat_setting.c +++ b/src/chat/chat_setting.c @@ -38,11 +38,12 @@ static const struct chat_setting_def g_setting_defs[] = { {"radio_opus_bitrate", CHAT_SETTING_INT, 32, 16, 128}, {"radio_capture_stereo", CHAT_SETTING_INT, 0, 0, 1}, {"compressor_enabled", CHAT_SETTING_BOOL, 1, 0, 1}, - {"compressor_max_gain_db", CHAT_SETTING_INT, 15, 1, 100}, + {"compressor_max_gain_db", CHAT_SETTING_INT, 15, 1, 60}, {"compressor_rise_rate", CHAT_SETTING_INT, 2, 1, 100}, {"radio_compressor_enabled", CHAT_SETTING_BOOL, 1, 0, 1}, - {"radio_compressor_max_gain_db",CHAT_SETTING_INT, 15, 1, 100}, + {"radio_compressor_max_gain_db",CHAT_SETTING_INT, 15, 1, 60}, {"radio_vad_enabled", CHAT_SETTING_BOOL, 0, 0, 1}, + {"radio_vad_compressor_max_gain_db", CHAT_SETTING_INT, 15, 1, 60}, {"radio_vad_threshold", CHAT_SETTING_INT, 50, 10, 95}, /* порог вероятности речи, % */ {"radio_vad_hangover_ms", CHAT_SETTING_INT, 200, 50, 2000},/* тишина до авто-отбоя */ {"media_download_max_peers", CHAT_SETTING_INT, 3, 1, 16}, @@ -60,7 +61,7 @@ static const struct chat_setting_def g_setting_defs[] = { {"aec_enabled", CHAT_SETTING_BOOL, 1, 0, 1}, /* AEC (SpeexDSP) в звонке, desktop GUI */ {"call_jitter_max_reserve_ms", CHAT_SETTING_INT, 1000, 500, 2000}, {"call_compressor_enabled", CHAT_SETTING_BOOL, 1, 0, 1}, - {"call_compressor_max_gain_db",CHAT_SETTING_INT, 15, 1, 100}, + {"call_compressor_max_gain_db",CHAT_SETTING_INT, 15, 1, 60}, }; #define CHAT_SETTING_COUNT (sizeof(g_setting_defs) / sizeof(g_setting_defs[0]))