Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license |
| 5 | * that can be found in the LICENSE file in the root of the source |
| 6 | * tree. An additional intellectual property rights grant can be found |
| 7 | * in the file PATENTS. All contributing project authors may |
| 8 | * be found in the AUTHORS file in the root of the source tree. |
| 9 | */ |
| 10 | |
| 11 | #ifndef API_AUDIO_ECHO_CANCELLER3_CONFIG_H_ |
| 12 | #define API_AUDIO_ECHO_CANCELLER3_CONFIG_H_ |
| 13 | |
Gustaf Ullberg | 3646f97 | 2018-02-14 15:19:04 +0100 | [diff] [blame] | 14 | #include <stddef.h> // size_t |
| 15 | |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 16 | namespace webrtc { |
| 17 | |
| 18 | // Configuration struct for EchoCanceller3 |
| 19 | struct EchoCanceller3Config { |
Per Åhgren | b6b00dc | 2018-02-20 22:18:27 +0100 | [diff] [blame] | 20 | EchoCanceller3Config(); |
Per Åhgren | 251c735 | 2018-03-28 16:31:57 +0200 | [diff] [blame] | 21 | EchoCanceller3Config(const EchoCanceller3Config& e); |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 22 | struct Delay { |
| 23 | size_t default_delay = 5; |
Gustaf Ullberg | 78b1c4a | 2018-05-25 10:12:58 +0200 | [diff] [blame] | 24 | size_t down_sampling_factor = 8; |
Per Åhgren | 75b57d3 | 2018-02-15 09:17:41 +0100 | [diff] [blame] | 25 | size_t num_filters = 5; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 26 | size_t api_call_jitter_blocks = 26; |
| 27 | size_t min_echo_path_delay_blocks = 0; |
| 28 | size_t delay_headroom_blocks = 2; |
| 29 | size_t hysteresis_limit_1_blocks = 1; |
| 30 | size_t hysteresis_limit_2_blocks = 1; |
Per Åhgren | 2d9a3b1 | 2018-05-17 17:24:29 +0200 | [diff] [blame] | 31 | size_t skew_hysteresis_blocks = 3; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 32 | } delay; |
| 33 | |
| 34 | struct Filter { |
| 35 | struct MainConfiguration { |
| 36 | size_t length_blocks; |
| 37 | float leakage_converged; |
| 38 | float leakage_diverged; |
| 39 | float error_floor; |
| 40 | float noise_gate; |
| 41 | }; |
| 42 | |
| 43 | struct ShadowConfiguration { |
| 44 | size_t length_blocks; |
| 45 | float rate; |
| 46 | float noise_gate; |
| 47 | }; |
| 48 | |
| 49 | MainConfiguration main = {13, 0.005f, 0.1f, 0.001f, 20075344.f}; |
| 50 | ShadowConfiguration shadow = {13, 0.7f, 20075344.f}; |
| 51 | |
| 52 | MainConfiguration main_initial = {12, 0.05f, 5.f, 0.001f, 20075344.f}; |
| 53 | ShadowConfiguration shadow_initial = {12, 0.9f, 20075344.f}; |
Per Åhgren | 5f1a31c | 2018-03-08 15:54:41 +0100 | [diff] [blame] | 54 | |
| 55 | size_t config_change_duration_blocks = 250; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 56 | } filter; |
| 57 | |
| 58 | struct Erle { |
| 59 | float min = 1.f; |
Per Åhgren | 5c532d3 | 2018-03-22 00:29:25 +0100 | [diff] [blame] | 60 | float max_l = 4.f; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 61 | float max_h = 1.5f; |
| 62 | } erle; |
| 63 | |
| 64 | struct EpStrength { |
Per Åhgren | ced31ba | 2018-05-09 11:48:49 +0200 | [diff] [blame] | 65 | float lf = 1.f; |
| 66 | float mf = 1.f; |
| 67 | float hf = 1.f; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 68 | float default_len = 0.f; |
| 69 | bool echo_can_saturate = true; |
| 70 | bool bounded_erl = false; |
| 71 | } ep_strength; |
| 72 | |
| 73 | struct Mask { |
Per Åhgren | b02644f | 2018-04-17 11:52:17 +0200 | [diff] [blame] | 74 | Mask(); |
| 75 | Mask(const Mask& m); |
Gustaf Ullberg | 0e6375e | 2018-05-04 11:29:02 +0200 | [diff] [blame] | 76 | float m0 = 0.1f; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 77 | float m1 = 0.01f; |
| 78 | float m2 = 0.0001f; |
| 79 | float m3 = 0.01f; |
Per Åhgren | b02644f | 2018-04-17 11:52:17 +0200 | [diff] [blame] | 80 | float m5 = 0.01f; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 81 | float m6 = 0.0001f; |
| 82 | float m7 = 0.01f; |
| 83 | float m8 = 0.0001f; |
| 84 | float m9 = 0.1f; |
Per Åhgren | b02644f | 2018-04-17 11:52:17 +0200 | [diff] [blame] | 85 | |
| 86 | float gain_curve_offset = 1.45f; |
| 87 | float gain_curve_slope = 5.f; |
| 88 | float temporal_masking_lf = 0.9f; |
| 89 | float temporal_masking_hf = 0.6f; |
| 90 | size_t temporal_masking_lf_bands = 3; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 91 | } gain_mask; |
| 92 | |
| 93 | struct EchoAudibility { |
| 94 | float low_render_limit = 4 * 64.f; |
| 95 | float normal_render_limit = 64.f; |
Per Åhgren | b02644f | 2018-04-17 11:52:17 +0200 | [diff] [blame] | 96 | float floor_power = 2 * 64.f; |
| 97 | float audibility_threshold_lf = 10; |
| 98 | float audibility_threshold_mf = 10; |
| 99 | float audibility_threshold_hf = 10; |
Per Åhgren | 90e3fbd | 2018-05-16 15:25:04 +0200 | [diff] [blame] | 100 | bool use_stationary_properties = true; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 101 | } echo_audibility; |
| 102 | |
| 103 | struct RenderLevels { |
| 104 | float active_render_limit = 100.f; |
| 105 | float poor_excitation_render_limit = 150.f; |
Gustaf Ullberg | c4b7f03 | 2018-06-01 11:22:05 +0200 | [diff] [blame^] | 106 | float poor_excitation_render_limit_ds8 = 20.f; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 107 | } render_levels; |
| 108 | |
| 109 | struct GainUpdates { |
| 110 | struct GainChanges { |
| 111 | float max_inc; |
| 112 | float max_dec; |
| 113 | float rate_inc; |
| 114 | float rate_dec; |
| 115 | float min_inc; |
| 116 | float min_dec; |
| 117 | }; |
| 118 | |
| 119 | GainChanges low_noise = {2.f, 2.f, 1.4f, 1.4f, 1.1f, 1.1f}; |
| 120 | GainChanges initial = {2.f, 2.f, 1.5f, 1.5f, 1.2f, 1.2f}; |
| 121 | GainChanges normal = {2.f, 2.f, 1.5f, 1.5f, 1.2f, 1.2f}; |
| 122 | GainChanges saturation = {1.2f, 1.2f, 1.5f, 1.5f, 1.f, 1.f}; |
| 123 | GainChanges nonlinear = {1.5f, 1.5f, 1.2f, 1.2f, 1.1f, 1.1f}; |
| 124 | |
Gustaf Ullberg | 0e6375e | 2018-05-04 11:29:02 +0200 | [diff] [blame] | 125 | float max_inc_factor = 2.0f; |
| 126 | float max_dec_factor_lf = 0.25f; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 127 | float floor_first_increase = 0.00001f; |
| 128 | } gain_updates; |
Per Åhgren | b6b00dc | 2018-02-20 22:18:27 +0100 | [diff] [blame] | 129 | |
| 130 | struct EchoRemovalControl { |
| 131 | struct GainRampup { |
Jesús de Vicente Peña | dd09287 | 2018-05-25 16:55:11 +0200 | [diff] [blame] | 132 | float initial_gain = 0.0f; |
Per Åhgren | b6b00dc | 2018-02-20 22:18:27 +0100 | [diff] [blame] | 133 | float first_non_zero_gain = 0.001f; |
| 134 | int non_zero_gain_blocks = 187; |
| 135 | int full_gain_blocks = 312; |
| 136 | } gain_rampup; |
Per Åhgren | 461cdf0 | 2018-02-27 01:59:37 +0100 | [diff] [blame] | 137 | bool has_clock_drift = false; |
Per Åhgren | e3ca991 | 2018-05-28 22:57:17 +0200 | [diff] [blame] | 138 | bool linear_and_stable_echo_path = false; |
Per Åhgren | b6b00dc | 2018-02-20 22:18:27 +0100 | [diff] [blame] | 139 | } echo_removal_control; |
Per Åhgren | 251c735 | 2018-03-28 16:31:57 +0200 | [diff] [blame] | 140 | |
| 141 | struct EchoModel { |
Jesús de Vicente Peña | dd09287 | 2018-05-25 16:55:11 +0200 | [diff] [blame] | 142 | EchoModel(); |
| 143 | EchoModel(const EchoModel& e); |
Per Åhgren | 251c735 | 2018-03-28 16:31:57 +0200 | [diff] [blame] | 144 | size_t noise_floor_hold = 50; |
| 145 | float min_noise_floor_power = 1638400.f; |
| 146 | float stationary_gate_slope = 10.f; |
| 147 | float noise_gate_power = 27509.42f; |
| 148 | float noise_gate_slope = 0.3f; |
| 149 | size_t render_pre_window_size = 1; |
Per Åhgren | 85eef49 | 2018-03-28 16:19:47 +0200 | [diff] [blame] | 150 | size_t render_post_window_size = 1; |
Jesús de Vicente Peña | dd09287 | 2018-05-25 16:55:11 +0200 | [diff] [blame] | 151 | size_t render_pre_window_size_init = 10; |
| 152 | size_t render_post_window_size_init = 10; |
Per Åhgren | 85eef49 | 2018-03-28 16:19:47 +0200 | [diff] [blame] | 153 | float nonlinear_hold = 1; |
| 154 | float nonlinear_release = 0.001f; |
Per Åhgren | 251c735 | 2018-03-28 16:31:57 +0200 | [diff] [blame] | 155 | } echo_model; |
Per Åhgren | 47d7fbd | 2018-04-24 12:44:29 +0200 | [diff] [blame] | 156 | |
| 157 | struct Suppressor { |
| 158 | size_t bands_with_reliable_coherence = 5; |
| 159 | } suppressor; |
Gustaf Ullberg | bffa300 | 2018-02-14 15:12:00 +0100 | [diff] [blame] | 160 | }; |
| 161 | } // namespace webrtc |
| 162 | |
| 163 | #endif // API_AUDIO_ECHO_CANCELLER3_CONFIG_H_ |