Agora C++ API Reference for All Platforms
audio_options_i.h
1 // Agora SDK
2 //
3 // Copyright (c) 2019 Agora.io. All rights reserved.
4 // Reference from WebRTC project
5 //
6 #pragma once
7 
8 #include "AgoraOptional.h"
9 
10 #define SET_FROM(X) SetFrom(&X, change.X)
11 
12 #define BEGIN_COMPARE() bool b = true
13 #define ADD_COMPARE(X) b = (b && (X == o.X))
14 #define END_COMPARE_AND_RETURN() \
15  ; \
16  return b
17 
18 #define UNPUBLISH(X) X.reset()
19 
20 namespace agora {
21 namespace rtc {
22 
26 enum class OPENSL_MODE {
30  ALWAYS_ON,
31 
35  ALWAYS_OFF,
36 
41 };
42 
43 // Options that can be applied to an audio track or audio engine.
44 struct AudioOptions {
45  AudioOptions() = default;
46  ~AudioOptions() = default;
47 
48  void SetAll(const AudioOptions& change) {
49  SET_FROM(audio_scenario);
50  SET_FROM(audio_routing);
51  SET_FROM(opensl_mode);
52  SET_FROM(has_published_stream);
53  SET_FROM(has_subscribed_stream);
54 
55  SET_FROM(adm_mix_option_selected);
57  SET_FROM(adm_input_sample_rate);
58  SET_FROM(adm_output_sample_rate);
59  SET_FROM(adm_stereo_out);
60  SET_FROM(adm_stereo_recording);
62  SET_FROM(adm_keep_audio_session);
63  SET_FROM(adm_use_hw_aec);
65  SET_FROM(adm_force_restart);
66  SET_FROM(adm_enable_opensl);
67  SET_FROM(adm_audio_layer);
69  SET_FROM(adm_audio_source);
71 
76  SET_FROM(apm_enable_aec);
77  SET_FROM(apm_enable_ns);
78  SET_FROM(apm_enable_agc);
79  SET_FROM(apm_enable_md);
81  SET_FROM(apm_enable_tone_remover);
82  SET_FROM(apm_enable_pitch_smoother);
84  SET_FROM(apm_delay_offset_ms);
85  SET_FROM(apm_aec_suppression_level);
86  SET_FROM(apm_aec_delay_type);
88  SET_FROM(apm_agc_target_level_dbfs);
90  SET_FROM(apm_agc_mode);
91  SET_FROM(apm_ns_level);
92  SET_FROM(apm_enable_dtd);
93 
94  SET_FROM(acm_bitrate);
95  SET_FROM(acm_codec);
96  SET_FROM(acm_dtx);
97  SET_FROM(acm_plc);
98  SET_FROM(acm_complex_level);
99  SET_FROM(acm_ptime);
100 
101  SET_FROM(neteq_live_min_delay);
106  SET_FROM(neteq_aqm_voice_threshold);
107  SET_FROM(playback_volume);
108  SET_FROM(webrtc_enable_aec3);
110 #if defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID)
111  SET_FROM(use_media_volume_in_headset);
113  SET_FROM(use_media_volume_in_solo);
114 #endif // defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID)
115  }
116 
117  bool operator==(const AudioOptions& o) const {
118  BEGIN_COMPARE();
119  ADD_COMPARE(audio_scenario);
120  ADD_COMPARE(audio_routing);
121  ADD_COMPARE(opensl_mode);
122  ADD_COMPARE(has_published_stream);
123  ADD_COMPARE(has_subscribed_stream);
124 
125  ADD_COMPARE(adm_mix_option_selected);
127  ADD_COMPARE(adm_input_sample_rate);
128  ADD_COMPARE(adm_output_sample_rate);
129  ADD_COMPARE(adm_stereo_out);
130  ADD_COMPARE(adm_stereo_recording);
131  ADD_COMPARE(adm_force_use_bluetooth_a2dp);
132  ADD_COMPARE(adm_keep_audio_session);
133  ADD_COMPARE(adm_use_hw_aec);
135  ADD_COMPARE(adm_force_restart);
136  ADD_COMPARE(adm_enable_opensl);
137  ADD_COMPARE(adm_audio_layer);
139  ADD_COMPARE(adm_audio_source);
140  ADD_COMPARE(adm_playout_bufsize_factor);
141 
142  ADD_COMPARE(apm_override_lua_enable_aec);
143  ADD_COMPARE(apm_override_lua_enable_ns);
144  ADD_COMPARE(apm_override_lua_enable_agc);
145  ADD_COMPARE(apm_override_lua_enable_md);
146  ADD_COMPARE(apm_enable_aec);
147  ADD_COMPARE(apm_enable_ns);
148  ADD_COMPARE(apm_enable_agc);
149  ADD_COMPARE(apm_enable_md);
150  ADD_COMPARE(apm_enable_highpass_filter);
151  ADD_COMPARE(apm_enable_tone_remover);
152  ADD_COMPARE(apm_enable_pitch_smoother);
153  ADD_COMPARE(apm_enable_howling_control);
154  ADD_COMPARE(apm_delay_offset_ms);
155  ADD_COMPARE(apm_aec_suppression_level);
156  ADD_COMPARE(apm_aec_delay_type);
157  ADD_COMPARE(apm_aec_nlp_aggressiveness);
158  ADD_COMPARE(apm_agc_target_level_dbfs);
159  ADD_COMPARE(apm_agc_compression_gain_db);
160  ADD_COMPARE(apm_agc_mode);
161  ADD_COMPARE(apm_ns_level);
162  ADD_COMPARE(apm_enable_dtd);
163 
164  ADD_COMPARE(acm_bitrate);
165  ADD_COMPARE(acm_codec);
166  ADD_COMPARE(acm_dtx);
167  ADD_COMPARE(acm_plc);
168  ADD_COMPARE(acm_complex_level);
169  ADD_COMPARE(acm_ptime);
170 
171  ADD_COMPARE(neteq_live_min_delay);
172  ADD_COMPARE(neteq_jitter_buffer_max_packets);
174  ADD_COMPARE(neteq_jitter_max_target_delay);
175  ADD_COMPARE(neteq_target_level_optimization);
176  ADD_COMPARE(neteq_aqm_voice_threshold);
177  ADD_COMPARE(playback_volume);
178  ADD_COMPARE(webrtc_enable_aec3);
180 #if defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID)
181  ADD_COMPARE(use_media_volume_in_headset);
182  ADD_COMPARE(use_media_volume_in_audience);
183  ADD_COMPARE(use_media_volume_in_solo);
184 #endif // defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID)
185  END_COMPARE_AND_RETURN();
186  }
187 
189  UNPUBLISH(adm_input_sample_rate);
190  UNPUBLISH(adm_output_sample_rate);
191  UNPUBLISH(adm_stereo_out);
192  UNPUBLISH(adm_use_hw_aec);
195  UNPUBLISH(playback_volume);
196  return *this;
197  }
198 
199  bool operator!=(const AudioOptions& o) const { return !(*this == o); }
200 
201  Optional<uint32_t> audio_scenario; // agora::rtc::AUDIO_SCENARIO_TYPE
202  Optional<uint32_t> audio_routing; // agora::rtc::AudioRoute
206 
207  // ios::AVAudioSessionCategoryOptionMixWithOthers
213  // Stereo Recording setting
215 
216  // ios::AVAudioSessionCategoryOptionAllowBluetoothA2DP
221 
223 
229 
250 
251  // Double talk detection switcher.
252  // Android game streaming scenario should be true, all other cases should be false;
254 
268 
269  // hacks for alter webrtc behavior
271 
272  // derived options
274 #if defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID)
278 #endif // defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID)
279 
280  private:
281  template <typename T>
282  static void SetFrom(Optional<T>* s, const Optional<T>& o) {
283  if (o) {
284  *s = o;
285  }
286  }
287 };
288 
289 } // namespace rtc
290 } // namespace agora
agora::rtc::AudioOptions::apm_enable_ns
Optional< bool > apm_enable_ns
Definition: audio_options_i.h:235
agora::rtc::AudioOptions::acm_plc
Optional< bool > acm_plc
Definition: audio_options_i.h:258
agora::rtc::AudioOptions::adm_force_use_bluetooth_a2dp
Optional< uint32_t > adm_force_use_bluetooth_a2dp
Definition: audio_options_i.h:217
agora::rtc::AudioOptions::webrtc_enable_aec3
Optional< bool > webrtc_enable_aec3
Definition: audio_options_i.h:270
agora::rtc::AudioOptions
Definition: audio_options_i.h:44
agora::rtc::AudioOptions::audio_scenario
Optional< uint32_t > audio_scenario
Definition: audio_options_i.h:201
agora::rtc::OPENSL_MODE::ON_WITH_HEADSET
@ ON_WITH_HEADSET
agora::rtc::AudioOptions::adm_force_restart
Optional< bool > adm_force_restart
Definition: audio_options_i.h:222
agora::rtc::AudioOptions::apm_enable_agc
Optional< bool > apm_enable_agc
Definition: audio_options_i.h:236
agora::rtc::AudioOptions::apm_enable_tone_remover
Optional< bool > apm_enable_tone_remover
Definition: audio_options_i.h:239
agora::rtc::AudioOptions::operator!=
bool operator!=(const AudioOptions &o) const
Definition: audio_options_i.h:199
agora::rtc::AudioOptions::adm_output_sample_rate
Optional< uint32_t > adm_output_sample_rate
Definition: audio_options_i.h:211
agora::rtc::AudioOptions::adm_enable_record_but_not_publish
Optional< bool > adm_enable_record_but_not_publish
Definition: audio_options_i.h:226
agora::rtc::AudioOptions::acm_codec
Optional< uint32_t > acm_codec
Definition: audio_options_i.h:256
agora::rtc::AudioOptions::apm_aec_delay_type
Optional< uint32_t > apm_aec_delay_type
Definition: audio_options_i.h:244
agora::rtc::OPENSL_MODE::ALWAYS_OFF
@ ALWAYS_OFF
agora::rtc::AudioOptions::use_media_volume_in_audience
Optional< int > use_media_volume_in_audience
Definition: audio_options_i.h:276
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::AudioOptions::acm_dtx
Optional< bool > acm_dtx
Definition: audio_options_i.h:257
agora::rtc::AudioOptions::use_media_volume_in_solo
Optional< int > use_media_volume_in_solo
Definition: audio_options_i.h:277
agora::rtc::AudioOptions::adm_enable_opensl
Optional< bool > adm_enable_opensl
Definition: audio_options_i.h:224
agora::rtc::AudioOptions::apm_enable_highpass_filter
Optional< bool > apm_enable_highpass_filter
Definition: audio_options_i.h:238
agora::rtc::AudioOptions::Filter
AudioOptions & Filter()
Definition: audio_options_i.h:188
agora::rtc::AudioOptions::adm_use_hw_aec
Optional< bool > adm_use_hw_aec
Definition: audio_options_i.h:219
agora::rtc::AudioOptions::apm_delay_offset_ms
Optional< uint32_t > apm_delay_offset_ms
Definition: audio_options_i.h:242
agora::rtc::AudioOptions::operator==
bool operator==(const AudioOptions &o) const
Definition: audio_options_i.h:117
agora::rtc::AudioOptions::neteq_jitter_max_target_delay
Optional< int32_t > neteq_jitter_max_target_delay
Definition: audio_options_i.h:264
agora::rtc::AudioOptions::SetAll
void SetAll(const AudioOptions &change)
Definition: audio_options_i.h:48
agora::rtc::AudioOptions::apm_enable_dtd
Optional< bool > apm_enable_dtd
Definition: audio_options_i.h:253
agora::rtc::AudioOptions::neteq_aqm_voice_threshold
Optional< uint32_t > neteq_aqm_voice_threshold
Definition: audio_options_i.h:266
agora::rtc::AudioOptions::neteq_target_level_optimization
Optional< bool > neteq_target_level_optimization
Definition: audio_options_i.h:265
agora::rtc::AudioOptions::adm_keep_audio_session
Optional< bool > adm_keep_audio_session
Definition: audio_options_i.h:218
agora::rtc::AudioOptions::~AudioOptions
~AudioOptions()=default
agora::rtc::AudioOptions::apm_override_lua_enable_agc
Optional< bool > apm_override_lua_enable_agc
Definition: audio_options_i.h:232
agora::rtc::AudioOptions::adm_audio_source
Optional< uint32_t > adm_audio_source
Definition: audio_options_i.h:227
agora::rtc::AudioOptions::audio_routing
Optional< uint32_t > audio_routing
Definition: audio_options_i.h:202
agora::rtc::OPENSL_MODE
OPENSL_MODE
Definition: audio_options_i.h:26
agora::rtc::AudioOptions::apm_enable_pitch_smoother
Optional< bool > apm_enable_pitch_smoother
Definition: audio_options_i.h:240
agora::rtc::AudioOptions::apm_aec_suppression_level
Optional< uint32_t > apm_aec_suppression_level
Definition: audio_options_i.h:243
agora::rtc::AudioOptions::neteq_live_min_delay
Optional< uint32_t > neteq_live_min_delay
Definition: audio_options_i.h:261
agora::rtc::AudioOptions::apm_override_lua_enable_ns
Optional< bool > apm_override_lua_enable_ns
Definition: audio_options_i.h:231
agora::rtc::AudioOptions::acm_ptime
Optional< uint32_t > acm_ptime
Definition: audio_options_i.h:260
agora::rtc::AudioOptions::acm_bitrate
Optional< uint32_t > acm_bitrate
Definition: audio_options_i.h:255
agora::rtc::AudioOptions::apm_override_lua_enable_md
Optional< bool > apm_override_lua_enable_md
Definition: audio_options_i.h:233
agora::rtc::AudioOptions::adm_audio_layer
Optional< uint32_t > adm_audio_layer
Definition: audio_options_i.h:225
agora::rtc::AudioOptions::acm_complex_level
Optional< uint32_t > acm_complex_level
Definition: audio_options_i.h:259
agora::rtc::AudioOptions::adm_stereo_recording
Optional< bool > adm_stereo_recording
Definition: audio_options_i.h:214
agora::rtc::AudioOptions::derived_headset_black_list_device
Optional< bool > derived_headset_black_list_device
Definition: audio_options_i.h:273
agora::rtc::AudioOptions::adm_output_align_input_sample_rate
Optional< bool > adm_output_align_input_sample_rate
Definition: audio_options_i.h:220
agora::rtc::AudioOptions::opensl_mode
Optional< OPENSL_MODE > opensl_mode
Definition: audio_options_i.h:203
agora::rtc::OPENSL_MODE::ALWAYS_ON
@ ALWAYS_ON
agora::rtc::AudioOptions::has_published_stream
Optional< bool > has_published_stream
Definition: audio_options_i.h:204
agora::rtc::AudioOptions::adm_stereo_out
Optional< bool > adm_stereo_out
Definition: audio_options_i.h:212
agora::rtc::AudioOptions::apm_enable_aec
Optional< bool > apm_enable_aec
Definition: audio_options_i.h:234
agora::rtc::AudioOptions::apm_agc_compression_gain_db
Optional< uint32_t > apm_agc_compression_gain_db
Definition: audio_options_i.h:247
agora::rtc::AudioOptions::apm_override_lua_enable_aec
Optional< bool > apm_override_lua_enable_aec
Definition: audio_options_i.h:230
agora::rtc::AudioOptions::adm_override_lua_input_sample_rate
Optional< uint32_t > adm_override_lua_input_sample_rate
Definition: audio_options_i.h:209
agora::rtc::AudioOptions::adm_mix_option_selected
Optional< uint32_t > adm_mix_option_selected
Definition: audio_options_i.h:208
agora::rtc::AudioOptions::AudioOptions
AudioOptions()=default
agora::rtc::AudioOptions::apm_enable_howling_control
Optional< bool > apm_enable_howling_control
Definition: audio_options_i.h:241
agora::rtc::AudioOptions::has_subscribed_stream
Optional< bool > has_subscribed_stream
Definition: audio_options_i.h:205
agora::rtc::AudioOptions::neteq_jitter_buffer_fast_accelerate
Optional< bool > neteq_jitter_buffer_fast_accelerate
Definition: audio_options_i.h:263
agora::rtc::AudioOptions::adm_input_sample_rate
Optional< uint32_t > adm_input_sample_rate
Definition: audio_options_i.h:210
agora::rtc::AudioOptions::apm_agc_mode
Optional< uint32_t > apm_agc_mode
Definition: audio_options_i.h:248
agora::rtc::AudioOptions::neteq_jitter_buffer_max_packets
Optional< uint32_t > neteq_jitter_buffer_max_packets
Definition: audio_options_i.h:262
agora::rtc::AudioOptions::apm_aec_nlp_aggressiveness
Optional< uint32_t > apm_aec_nlp_aggressiveness
Definition: audio_options_i.h:245
agora::rtc::AudioOptions::playback_volume
Optional< uint32_t > playback_volume
Definition: audio_options_i.h:267
agora::rtc::AudioOptions::apm_agc_target_level_dbfs
Optional< uint32_t > apm_agc_target_level_dbfs
Definition: audio_options_i.h:246
agora::rtc::AudioOptions::apm_ns_level
Optional< uint32_t > apm_ns_level
Definition: audio_options_i.h:249
agora::rtc::AudioOptions::apm_enable_md
Optional< bool > apm_enable_md
Definition: audio_options_i.h:237
agora::rtc::AudioOptions::adm_playout_bufsize_factor
Optional< float > adm_playout_bufsize_factor
Definition: audio_options_i.h:228
rtc
Definition: video_node_i.h:27
agora::Optional< uint32_t >
agora::rtc::AudioOptions::use_media_volume_in_headset
Optional< int > use_media_volume_in_headset
Definition: audio_options_i.h:275