一、技术选型与需求分析
在智能办公和移动应用场景中,语音转文字功能已成为提升效率的关键工具。本方案采用Vue3作为前端框架,结合百度语音识别API实现核心功能。技术选型依据如下:
- 前端框架选择:Vue3的Composition API提供更灵活的代码组织方式,响应式系统性能优于Vue2,适合处理实时数据更新场景。
- 语音识别服务:百度语音识别API提供高精度的实时语音转文字服务,支持中英文混合识别,接口响应速度快,适合移动端应用。
- 录音功能实现:Web Audio API结合MediaRecorder API可实现浏览器端录音,无需依赖原生应用,降低开发成本。
二、录音功能实现细节
1. 录音权限处理
在移动端实现录音功能,首要解决权限问题。Vue3中可通过以下方式处理:
const checkPermission = async () => {try {const stream = await navigator.mediaDevices.getUserMedia({ audio: true });stream.getTracks().forEach(track => track.stop());return true;} catch (err) {console.error('录音权限被拒绝:', err);return false;}};
2. 长按录音交互设计
移动端长按触发录音需结合touch事件:
let recordTimer = null;const startRecord = () => {const pressTime = Date.now();const touchStart = (e) => {if (Date.now() - pressTime > 500) { // 长按500ms触发initRecorder();document.removeEventListener('touchmove', touchMove);document.removeEventListener('touchend', touchEnd);}};const touchMove = () => { /* 移动时取消长按 */ };const touchEnd = () => { /* 短按不触发 */ };document.addEventListener('touchmove', touchMove);document.addEventListener('touchend', touchEnd);document.addEventListener('touchstart', touchStart, { once: true });};
3. 录音数据采集
使用MediaRecorder API实现录音:
let mediaRecorder = null;let audioChunks = [];const initRecorder = async () => {const stream = await navigator.mediaDevices.getUserMedia({ audio: true });mediaRecorder = new MediaRecorder(stream);mediaRecorder.ondataavailable = (event) => {audioChunks.push(event.data);};mediaRecorder.onstop = async () => {const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });await uploadAndConvert(audioBlob);audioChunks = [];};mediaRecorder.start(1000); // 每1秒收集一次数据};
三、百度语音识别API集成
1. API准备与配置
- 登录百度智能云控制台,创建语音识别应用
- 获取API Key和Secret Key
- 生成Access Token(有效期30天):
const getAccessToken = async (apiKey, secretKey) => {const authUrl = `https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${apiKey}&client_secret=${secretKey}`;const response = await fetch(authUrl);return await response.json();};
2. 实时语音识别实现
百度语音识别提供两种模式:
- 流式识别:适合长语音实时转写
- 一次性识别:适合短语音识别
本方案采用流式识别实现实时转写:
const streamRecognize = async (audioBlob) => {const token = await getAccessToken('your_api_key', 'your_secret_key');const formData = new FormData();formData.append('audio', audioBlob);formData.append('format', 'wav');formData.append('rate', 16000);formData.append('channel', 1);formData.append('token', token.access_token);const response = await fetch('https://vop.baidu.com/server_api', {method: 'POST',body: formData,headers: {'Content-Type': 'multipart/form-data'}});const result = await response.json();return result.result;};
3. 文件上传与识别
对于已录制的音频文件,可采用以下方式处理:
const uploadAndConvert = async (audioBlob) => {try {// 如果是短音频,可直接识别const text = await streamRecognize(audioBlob);updateTranscript(text);// 或者上传到服务器后识别(适用于大文件)/*const formData = new FormData();formData.append('file', audioBlob, 'recording.wav');const uploadRes = await fetch('/api/upload', { method: 'POST', body: formData });const fileUrl = await uploadRes.json();*/} catch (error) {console.error('识别失败:', error);}};
四、Vue3组件实现
1. 录音按钮组件
<template><div class="record-container"><button@touchstart="handleTouchStart"@touchend="handleTouchEnd":class="{ 'recording': isRecording }">{{ isRecording ? '松开结束' : '长按录音' }}</button><div class="transcript">{{ transcript }}</div></div></template><script setup>import { ref } from 'vue';const isRecording = ref(false);const transcript = ref('');const handleTouchStart = async () => {if (await checkPermission()) {isRecording.value = true;initRecorder();}};const handleTouchEnd = () => {if (isRecording.value) {mediaRecorder.stop();isRecording.value = false;}};const updateTranscript = (text) => {transcript.value = text;};</script>
2. 实时转写展示优化
为提升用户体验,可添加以下功能:
- 时间戳标记:在转写文本中插入时间点
- 说话人识别:结合声纹识别区分不同说话人
- 标点预测:通过NLP模型自动添加标点
五、性能优化与异常处理
1. 录音质量优化
- 设置合适的采样率(推荐16kHz)
- 控制录音时长(建议单次不超过5分钟)
- 使用WebAssembly优化音频处理
2. 错误处理机制
const errorHandler = (error) => {switch (error.code) {case 'NOT_ALLOWED_ERR':showToast('请允许麦克风权限');break;case 'OVERCONSTRAINED_ERR':showToast('设备不支持录音');break;default:showToast('录音失败,请重试');}};
3. 离线缓存策略
- 使用IndexedDB存储未识别的音频
- 网络恢复后自动重试识别
- 提供本地识别备用方案(如Web Speech API)
六、部署与测试要点
- 跨平台测试:在iOS/Android不同版本上验证兼容性
- 压力测试:模拟连续录音1小时测试稳定性
- 弱网测试:在3G网络下验证识别成功率
- 安全审计:确保Access Token不会泄露
七、扩展功能建议
- 多语言支持:通过API参数切换识别语言
- 行业术语库:上传专业词汇表提升识别准确率
- 实时编辑:在转写过程中允许用户修正错误
- 导出功能:支持TXT/DOCX格式导出
本方案通过Vue3与百度语音识别API的结合,实现了移动端高效的语音转文字功能。实际开发中需注意权限管理、错误处理和性能优化等关键点。根据业务需求,可进一步扩展为完整的智能会议记录系统或语音笔记应用。