AI聊天之语音输入

AI聊天之语音输入


                        <el-tooltip
                            :content="
                                !isRecording
                                    ? '点击语音输入'
                                    : '再次点击停止语音输入'
                            "
                            placement="top"
                        >
                            <el-button
                                :class="[
                                    'voice-btn',
                                    { recording: isRecording }
                                ]"
                                @click="startRecording"
                            >
                                <!-- <i class="el-icon-microphone"></i> -->
                                <img
                                    src="/assets/image/microphone.png"
                                    class="mic_icon"
                                    alt="语音输入"
                                    v-if="!isRecording"
                                />
                                <img
                                    src="/assets/image/microphone_close.png"
                                    style="width: 20px;height: 20px;"
                                    alt="停止语音输入"
                                    v-else
                                />
                            </el-button>
                        </el-tooltip>

录音使用的是navigator.mediaDevices 如果遇到一些问题可以查看其他文章

 async startRecording() {
            if (this.isAIResponding) return; // 判断是否正在回答
            if (this.isRecording) {
                this.stopRecording();
                return;
            }
            this.isRecording = true;
            // 请求麦克风权限
            try {
                // 弹窗提示正在语音输入,再次点击停止语音输入
                this.mediaStream = await navigator.mediaDevices.getUserMedia({
                    audio: true
                });
                this.mediaRecorder = new MediaRecorder(this.mediaStream);

                // 监听录音数据事件
                this.mediaRecorder.addEventListener(
                    "dataavailable",
                    async event => {
                        if (event.data.size > 0) {
                            console.log(event.data);

                            this.audioChunks.push(event.data);
                        }
                    }
                );
                this.mediaRecorder.onstop = () => {
                    console.log("录音停止1");
                    let that = this;
                    that.isRecording = false;
                    // 处理录制的音频数据
                    if (that.audioChunks.length > 0) {
                        that.uploadAudioFile(that.audioChunks[0], audioUrl => {
                            that.audioChunks = [];
                            console.log("音频地址:", audioUrl.src);
                            //获取到音频地址可以使用服务端接口也可以使用第3方api转换文本发送,也可以直接发送音频
                            that.sendMessage();
                        });
                    }
                };

                // 开始录音
                this.mediaRecorder.start();
            } catch (error) {
                this.$message({
                    showClose: true,
                    message: "获取麦克风权限失败",
                    type: "error"
                });
                console.error("获取麦克风权限失败:", error);
                this.isRecording = false;
            }
        },
           async stopRecording() {
            let that = this;
            if (that.mediaRecorder) {
                that.mediaRecorder.stop();
                that.mediaRecorder = null;
            }
            // 停止流
            if (that.mediaStream) {
                that.mediaStream.getTracks().forEach(track => track.stop());
                that.mediaStream = null;
            }
        },
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值