webrtc静音检测

webrtc静音检测


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,很有效果。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qianbo_insist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值