基于Vue3与百度语音识别API的录音转文字系统实现指南
2025.09.23 13:09浏览量:0简介:本文详解如何利用Vue3框架与百度语音识别API,实现长按录音、实时转文字及音频文件上传转写功能,提供完整技术方案与代码示例。
一、系统功能概述
本系统主要实现三大核心功能:长按触发录音、实时语音转文字、音频文件上传转写。采用Vue3作为前端框架,利用浏览器WebRTC API实现录音功能,通过百度语音识别API完成语音到文本的转换。系统包含实时流式识别与批量文件识别两种模式,适用于会议记录、语音输入、智能客服等场景。
1.1 技术架构选型
前端采用Vue3+Composition API构建响应式界面,使用RecordRTC库处理音频采集,通过axios与后端API交互。后端可选用Node.js或Python搭建简单代理服务,解决跨域问题并处理API密钥管理。百度语音识别API提供高精度的语音转写服务,支持中英文及多种方言识别。
二、录音功能实现
2.1 录音按钮交互设计
采用长按触发机制提升用户体验,通过touchstart和touchend事件计算按压时长:
let pressTimer;const startPress = () => {pressTimer = setTimeout(() => {startRecording(); // 长按1秒后开始录音}, 1000);};const cancelPress = () => {clearTimeout(pressTimer);};// 在按钮元素上绑定<button@touchstart="startPress"@touchend="cancelPress"@mousedown="startPress"@mouseup="cancelPress">按住说话</button>
2.2 音频采集实现
使用RecordRTC库简化音频采集流程:
import RecordRTC from 'recordrtc';let recorder;let audioStream;const startRecording = async () => {try {audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });recorder = new RecordRTC(audioStream, {type: 'audio/wav',mimeType: 'audio/wav',recorderType: StereoAudioRecorder,desiredSampRate: 16000});recorder.startRecording();// 显示录音状态UI} catch (e) {console.error('录音失败:', e);}};const stopRecording = () => {if (!recorder) return;recorder.stopRecording(() => {const blob = recorder.getBlob();processAudio(blob); // 处理获取的音频Blobrecorder.destroy();audioStream.getTracks().forEach(track => track.stop());});};
三、百度语音识别API集成
3.1 API准备与配置
- 登录百度智能云控制台
- 创建语音识别应用,获取API Key和Secret Key
- 生成Access Token(有效期30天):
const getAccessToken = async () => {const result = await axios.get('https://aip.baidubce.com/oauth/2.0/token', {params: {grant_type: 'client_credentials',client_id: '您的API Key',client_secret: '您的Secret Key'}});return result.data.access_token;};
3.2 实时流式识别实现
百度API支持WebSocket长连接实现实时转写:
const startRealTimeRecognition = async (audioBlob) => {const token = await getAccessToken();const wsUrl = `wss://vop.baidu.com/websocket_socket.do?token=${token}&cuid=您的设备ID&codec=wav&format=pcm&sample=16000&channel=1`;const ws = new WebSocket(wsUrl);let isFirstFrame = true;ws.onopen = () => {console.log('WebSocket连接建立');// 发送配置信息ws.send(JSON.stringify({common: { app_id: '您的应用ID' },business: {domain: 'general',language: 'zh',accent: 'mandarin'}}));};ws.onmessage = (event) => {const data = JSON.parse(event.data);if (data.result) {// 实时显示识别结果realTimeText.value += data.result.replace(/[,。?、]/g, '');}};// 音频分片发送const fileReader = new FileReader();fileReader.onload = () => {const arrayBuffer = fileReader.result;const view = new DataView(arrayBuffer);const sliceSize = 1280; // 每片1280字节for (let i = 0; i < view.byteLength; i += sliceSize) {const chunk = view.slice(i, Math.min(i + sliceSize, view.byteLength));setTimeout(() => {if (ws.readyState === WebSocket.OPEN) {ws.send(new Blob([chunk]));}}, isFirstFrame ? 0 : 100); // 首包立即发送,后续间隔100msisFirstFrame = false;}};fileReader.readAsArrayBuffer(audioBlob);};
3.3 文件上传识别实现
对于已录制的音频文件,使用REST API进行识别:
const uploadAndRecognize = async (audioBlob) => {const token = await getAccessToken();const formData = new FormData();formData.append('audio', audioBlob, 'recording.wav');formData.append('format', 'wav');formData.append('rate', 16000);formData.append('channel', 1);formData.append('token', token);formData.append('cuid', '您的设备ID');formData.append('len', audioBlob.size);try {const response = await axios.post('https://vop.baidu.com/server_api',formData,{headers: {'Content-Type': 'multipart/form-data'}});return response.data.result;} catch (error) {console.error('识别失败:', error);return '识别出错';}};
四、完整流程实现
4.1 组件化设计
创建SpeechRecognition组件:
<template><div class="speech-container"><div class="record-btn"@touchstart="startPress"@touchend="cancelPress"@mousedown="startPress"@mouseup="cancelPress">{{ recording ? '松开结束' : '按住说话' }}</div><div class="status">{{ statusText }}</div><div class="result">{{ recognitionResult }}</div><input type="file" @change="handleFileUpload" accept="audio/*" /></div></template><script setup>import { ref } from 'vue';// 引入录音和识别函数...const recording = ref(false);const statusText = ref('');const recognitionResult = ref('');// 实现各方法...</script>
4.2 性能优化建议
- 音频预处理:使用Web Audio API进行降噪处理
- 分片传输:大文件分块上传,避免内存溢出
- 节流控制:实时识别时控制发送频率(建议100-200ms/次)
- 错误重试:网络异常时实现自动重连机制
- 结果缓存:本地存储历史识别记录
五、部署与注意事项
- 跨域处理:后端代理需配置CORS,或使用Nginx反向代理
- 安全策略:
- 敏感操作需用户确认(如录音权限)
- API密钥不应暴露在前端代码中
- 实现HTTPS确保数据传输安全
- 兼容性测试:
- 主流浏览器(Chrome/Firefox/Safari)
- 移动端(iOS/Android)不同版本
- 不同采样率音频适配
六、扩展功能建议
- 多语言支持:通过API参数切换识别语言
- 说话人分离:使用百度API的说话人 diarization 功能
- 热点词高亮:对专业术语进行特殊标记
- 实时编辑:允许用户修正识别结果并反馈优化
- 导出功能:支持TXT/DOCX等多种格式导出
本实现方案通过Vue3的响应式特性与百度语音识别API的高精度识别能力结合,构建了完整的语音转文字系统。实际开发中需根据具体业务场景调整参数配置,并做好异常处理和用户体验优化。建议先在小规模测试环境中验证功能,再逐步扩展到生产环境。

发表评论
登录后可评论,请前往 登录 或 注册