播放按键音两种方式
1,自己实现。播放16个音频文件。
也不是很麻烦。这个就不介绍了。简单来说就是播放音频文件。
2,pjsua2里面内置的。
很好用。
主要是使用ToneGenerator这个类。
使用ToneGenerator实现
因为pjsua2封装的pjsip的类,因此,你可以通过参考pjsip的demo来得到pjsua2的接口的调用(我是通过搜索源码来对应关联的)。
主要的代码如下:
初始化
//初始化
ToneGenerator *m_pToneGenerator = nullptr;
m_pToneGenerator = new ToneGenerator();
m_pToneGenerator->createToneGenerator(8000);
//下面这步很重要,我找了半天的原因。
AudioMedia& play_med = Endpoint::instance().audDevManager().getPlaybackDevMedia();
m_pToneGenerator->startTransmit(play_med);
调用部分
ToneDigitVector t_toneDigitVector;
ToneDigit t_digit;
t_digit.digit = "3";
t_digit.on_msec = 260;
t_digit.off_msec = 200;//这里能控制声音播放的时长
t_digit.volume = 0;
t_toneDigitVector.push_back(t_digit);
try {
m_pToneGenerator->playDigits(t_toneDigitVector);
} catch (Error &err) {
qDebug()<<"m_toneGenerator.playDigits err:"<<err.info().c_str();
}
注意里面的 t_digit.digit 字段默认的取值是0~9*#ABCD,也可以自己设置自定义的按键音(通过调用setDigitMap)。
另一种调用
// ToneDescVector t_toneDescVector;
// ToneDesc t_toneDesc;
// t_toneDesc.freq1 = 200;
// t_toneDesc.freq2 = 0;
// t_toneDesc.on_msec = 100;
// t_toneDesc.off_msec =100;
// t_toneDescVector.push_back(t_toneDesc);
// m_pToneGenerator->play(t_toneDescVector);
总结
ToneGenerator 还是很好用的。