webrtc静音检测
webrtc静音检测语音检测代码语音检测很多语音检测的比如科大讯飞是使用pcm或者wave传输过去进行语音识别的,流量很大,使用客户端的时候可以使用静音检测算法来减小传输流量。这样做有很多好处,在静音与静音之间的语句可以用来合并成一句话。这里使用webrtc 的静音检测算法来检测,很有效。但是对于语音支持来讲,分为8000HZ,16000HZ,和32000HZ,并且检测并非直接支持所有方式。...
·
webrtc静音检测二
语音检测
很多语音检测的比如科大讯飞是使用pcm或者wave传输过去进行语音识别的,流量很大,使用客户端的时候可以使用静音检测算法来减小传输流量。这样做有很多好处,在静音与静音之间的语句可以用来合并成一句话。
这里使用webrtc 的静音检测算法来检测,很有效。但是对于语音支持来讲,分为8000HZ,16000HZ,和32000HZ,并且检测并非直接支持所有方式。
文档指明可以支持10ms , 20ms, 30ms,语音检测。对应于语音可以使用160,320,480 个short 的sample去检测是否静音。如果直接输入4096字节或者2048字节检测,直接返回error -1.
代码
int ret = WebRtcVad_ValidRateAndFrameLength(16000, 480);
int lenl = len / sizeof(short); // 2048 0-479 480+480-960 961-1441 1442
short * start = (short *)data;
short * end = (short*)(start + lenl);
int a[5] = { 0,0,0,0,0 };
int i = 0;
while (start < end)
{
a[i++] = _vadcheck.detect(start, 480);
start += 480;
int dlen = end - start;
if (end - start < 480)
break;
}
start = end - 480;
a[i] = _vadcheck.detect(start, 480);
OutMessage("status :%d %d %d %d %d", a[0],a[1],a[2],a[3],a[4]);
用WebRtcVad_ValidRateAndFrameLength 函数可以获取是否支持频率的字节(short字节)
如果是2048个sample,其实为4096字节。那么每480个字节检测一下,剩余字节怎么检测,就是像上文一样,可以检测,剩余不够480字节时,直接回退480字节进行剩余检测,在2048个sample中只要有一个检测为1,则该sample非静音。
打印可以看到,说话的时候返回1,不说话的时候都是0,很有效果。
更多推荐
已为社区贡献4条内容
所有评论(0)