人声检测原理VAD

在机器人的研究中,机器人与人语音交互是一个重要的功能,在语音交互中,人声检测至关重要。不论是在手机中,还是在esp32芯片上,都需要一种简单快捷的方式来检测本地语音,滤掉杂音和噪音。

机器人启动后会一直在后台工作采集环境的声音,当本地检测到人声时,会发送给大模型识别,当大模型正确识别语音后,会把识别后的文字转给大模型分析回复,回复的结果通过超拟人合成人声发出来。通过这样的设定,机器人会在工作过程中随时接受语音指令,陪人聊天和与人交互。

package com.example.sparkchaindemo.llm.online_llm.bm;

import android.util.Log;

public class VAD {
    private int sampleRate;
    private int frameSize;
    private double energyThreshold; // 能量阈值

    public VAD(int sampleRate, int frameSize) {
        this.sampleRate = sampleRate;
        this.frameSize = frameSize;
        this.energyThreshold = 0.01; // 根据实际情况调整
    }

    // 检测音频帧是否包含人声
    public boolean detectVoice(byte[] audioFrame) {
        double energy = calculateEnergy(audioFrame);
        Log.i("jiaAAA", "energy="+energy);
        return energy > energyThreshold;
    }

    // 计算音频帧的能量
    private double calculateEnergy(byte[] audioFrame) {
        double sum = 0;
        for (int i = 0; i < audioFrame.length; i +=2) {
            //short sampleShort = (short)0xffff;
            //sampleShort &=audioFrame[i+1];
            //sampleShort = (short)((sampleShort<<8)|audioFrame[1]);
            short sampleShort = (short)((audioFrame[i]&0xff)|(audioFrame[i+1]<<8));

            double sample = sampleShort / 32768.0;
            sum += sample * sample;
        }
        return sum / audioFrame.length;
    }
}

演示:

【讯飞机器狗对话豆包大模型-哔哩哔哩】 https://b23.tv/EolJbEq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值