采用linphone 进行语音通话,获取语音数据进行识别的时候发现效果不是很好,由于通话采用的采样率是8000,我想将linphone的通话采样率变为16000,看看实际效果如何:
默认采用的是PCMA的格式,由于语音识别接口只接受PCM或者wav这种不压缩的格式,所以我没有想修改linphone通话的payload类型,直接去将pcma的采样率变成16000,使用代码管理,到时候不需要了也能直接回退。
具体修改的地方:
1.将alaw.c 文件中获取sample的方法返回值由8000变为16000;
2.将ortp中avprofile.c文件中 PCMA格式的clock_rate 由8000变为16000;
这2个是在获取和设置采样率的时候会用到的,但是在配置这2个后,发现
只是resample 这个filter 将采样率由48000变为了16000, 但是打log 发现 PCMA格式的clock_rate 还是8000,比较困惑 ,重新看了下linphone 接电话的流程。
Linphone 有读配置文件,然后我将配置文件中的PCMA格式改为了16000,发现linphone通话payload不再使用PCMA,改为PCMU了。
我从 linphone_core_invite_address_with_params 开始查看到payload选择的整个过程。
一个比较关键的函数是:linphone_call_start_audio_stream 这个函数是通话流开始也就是接通前会调用的,里面调用了audio_stream_from_io这个方法,这个方法中和payload相关的函数是make_profile函数,这个函数关键的参数是call->resultdesc,所以找到这个在