音频采集(VUE3+JAVA)

vue部分代码

xx.vue

import Recorder from './Recorder.js';
export default {
  data() {
        return {
            mediaStream: null,
            recorder: null,
            isRecording: false,
            audioChunks: [],
            vadInterval: null // 新增:用于存储声音活动检测的间隔 ID
        };
    },
    async mounted() {
        this.mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true });
        this.startVAD();
    },
    beforeDestroy() {
        // 新增:组件销毁前清理声音活动检测的间隔
        if (this.vadInterval) {
            cancelAnimationFrame(this.vadInterval);
        }
    },
    created() {
        this.defaultLogin();
    },
    methods: {
        startVAD() {
            const audioContext = new (window.AudioContext || window.webkitAudioContext)();
            const source = audioContext.createMediaStreamSource(this.mediaStream);
            const analyser = audioContext.createAnalyser();
            source.connect(analyser);
            analyser.fftSize = 2048;
            const bufferLength = analyser.frequencyBinCount;
            const dataArray = new Uint8Array(bufferLength);
            const checkVoiceActivity = () => {
                analyser.getByteFrequencyData(dataArray);
                let sum = 0;
                for (let i = 0; i < bufferLength; i++) {
                    sum += dataArray[i];
                }
                const average = sum / bufferLength;
                if (average > 30 && !this.isRecording) {
                    this.startRecording();
                } else if (average < 10 && this.isRecording) {
                    setTimeout(() => {
                        analyser.getByteFrequencyData(dataArray);
                        let newSum = 0;
                        for (let i = 0; i < bufferLength; i++) {
                            newSum += dataArray[i];
                        }
                        const newAverage = newSum / bufferLength;
                        if (newAverage < 10) {
                            this.stopRecording(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值