背景
在观看直播的过程中,保不齐网络出现卡的现象,可能导致音频数据包累积了好几秒的数据,这时候要么丢直接播放新的, 要么直接播放基音, soundTouch可以加速播放并不要变调
主要技术点
soundTouch 的输入
void CXAudioPlay::sound_touch_put(uint8_t *audio_buf, int data_size, int nb)
{
for(auto i = 0; i < data_size / 2 + 1; i++)
{
touch_buffer_put[i] = (audio_buf[i * 2] | (audio_buf[i * 2 + 1] << 8));
}
_soundTouch->putSamples(touch_buffer_put, nb);
}
soundTouch 的输出
int CXAudioPlay::sound_touch_recv(uint8_t *audio_buf, int samples_number, int channels)
{
int nb = _soundTouch->receiveSamples(touch_buffer_recv, samples_number);
int length = nb * channels * 2;
for(auto i = 0; i < length / 2 ; i++)
{
audio_buf[i * 2] = uint8_t(touch_buffer_recv[i]);
audio_buf[i * 2 + 1] = uint8_t(touch_buffer_recv[i] >> 8);
}
return length > 0 ? length : -1;
}
soundTouch 的变速
if(_soundTouch)
{
_soundTouch->setTempoChange(12.0f);
}
开源地址:
https://gitee.com/alldemo/srplayer.git
学习合作:
作者:QQ(690759587)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)