const char *type=lp_config_get_string(lc->config,"sound","el_type","mic");
if (strcasecmp(type,"mic")==0)
audio_stream_enable_echo_limiter(lc->audiostream,ELControlMic);
- else if (strcasecmp(type,"speaker")==0)
- audio_stream_enable_echo_limiter(lc->audiostream,ELControlSpeaker);
+ else if (strcasecmp(type,"full")==0)
+ audio_stream_enable_echo_limiter(lc->audiostream,ELControlFull);
}
audio_stream_enable_gain_control(lc->audiostream,TRUE);
if (linphone_core_echo_cancellation_enabled(lc)){
static void post_configure_audio_streams(LinphoneCore *lc){
AudioStream *st=lc->audiostream;
- float gain=lp_config_get_float(lc->config,"sound","mic_gain",-1);
- if (gain!=-1)
- audio_stream_set_mic_gain(st,gain);
+ float mic_gain=lp_config_get_float(lc->config,"sound","mic_gain",-1);
+ float thres = 0;
+ if (mic_gain!=-1)
+ audio_stream_set_mic_gain(st,mic_gain);
lc->audio_muted=FALSE;
float recv_gain = lc->sound_conf.soft_play_lev;
if (recv_gain != 0) {
}
if (linphone_core_echo_limiter_enabled(lc)){
float speed=lp_config_get_float(lc->config,"sound","el_speed",-1);
- float thres=lp_config_get_float(lc->config,"sound","el_thres",-1);
+ thres=lp_config_get_float(lc->config,"sound","el_thres",-1);
float force=lp_config_get_float(lc->config,"sound","el_force",-1);
int sustain=lp_config_get_int(lc->config,"sound","el_sustain",-1);
MSFilter *f=NULL;
- if (st->el_type==ELControlMic){
+ if (st->el_type!=ELInactive){
f=st->volsend;
if (speed==-1) speed=0.03;
- if (force==-1) force=10;
- }
- else if (st->el_type==ELControlSpeaker){
- f=st->volrecv;
- if (speed==-1) speed=0.02;
- if (force==-1) force=5;
- }
- if (speed!=-1)
+ if (force==-1) force=25;
ms_filter_call_method(f,MS_VOLUME_SET_EA_SPEED,&speed);
+ ms_filter_call_method(f,MS_VOLUME_SET_EA_FORCE,&force);
if (thres!=-1)
ms_filter_call_method(f,MS_VOLUME_SET_EA_THRESHOLD,&thres);
- if (force!=-1)
- ms_filter_call_method(f,MS_VOLUME_SET_EA_FORCE,&force);
if (sustain!=-1)
ms_filter_call_method(f,MS_VOLUME_SET_EA_SUSTAIN,&sustain);
-
}
- if (st->volsend){
+ }
float ng_thres=lp_config_get_float(lc->config,"sound","ng_thres",0.05);
float ng_floorgain=lp_config_get_float(lc->config,"sound","ng_floorgain",0);
+ if (st->volsend){
ms_filter_call_method(st->volsend,MS_VOLUME_SET_NOISE_GATE_THRESHOLD,&ng_thres);
ms_filter_call_method(st->volsend,MS_VOLUME_SET_NOISE_GATE_FLOORGAIN,&ng_floorgain);
}
+ if (st->volrecv){
+ /* parameters for a limited noise-gate effect, using echo limiter threshold */
+ float floorgain = 1/mic_gain;
+ ms_filter_call_method(st->volrecv,MS_VOLUME_SET_NOISE_GATE_THRESHOLD,&thres);
+ ms_filter_call_method(st->volrecv,MS_VOLUME_SET_NOISE_GATE_FLOORGAIN,&floorgain);
+ }
parametrize_equalizer(lc,st);
if (lc->vtable.dtmf_received!=NULL){
/* replace by our default action*/
void linphone_core_mute_mic(LinphoneCore *lc, bool_t val){
if (lc->audiostream!=NULL){
audio_stream_set_mic_gain(lc->audiostream,
- (val==TRUE) ? 0 : 1.0);
+ (val==TRUE) ? 0 : 1.0); // REVISIT: take mic_gain value
if ( linphone_core_get_rtp_no_xmit_on_audio_mute(lc) ){
audio_stream_mute_rtp(lc->audiostream,val);
}