基于Vue3与百度语音识别API的录音转文本实现方案
2025.10.16 09:05浏览量:0简介:本文详细阐述如何使用Vue3实现长按或点击录音功能,并通过百度语音识别API将录音文件实时转换为文本,适用于会议记录、语音输入等场景。
基于Vue3与百度语音识别API的录音转文本实现方案
一、技术选型与核心需求分析
在智能办公场景中,语音转文本功能已成为提升效率的关键工具。本方案基于Vue3框架,结合浏览器原生Web API实现录音功能,通过百度语音识别API完成音频到文本的转换。核心需求包括:
- 录音触发方式:支持长按按钮或点击触发录音,适应移动端和PC端不同操作习惯
- 实时转换能力:实现录音过程中实时显示转换结果,提升用户体验
- API集成方案:通过百度语音识别API实现高精度文本转换
- 跨平台兼容性:确保在主流浏览器(Chrome、Firefox、Safari)中稳定运行
二、录音功能实现技术细节
1. 录音权限获取与初始化
const initRecorder = async () => {
try {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const mediaRecorder = new MediaRecorder(stream);
const audioChunks = [];
mediaRecorder.ondataavailable = event => {
audioChunks.push(event.data);
};
return { mediaRecorder, audioChunks, stream };
} catch (err) {
console.error('录音初始化失败:', err);
throw err;
}
};
关键点说明:
- 使用
navigator.mediaDevices.getUserMedia
获取麦克风权限 - 通过
MediaRecorder
API实现音频录制 - 采用数组缓存音频片段,便于后续处理
2. 长按触发机制实现
<template>
<button
@mousedown="startRecording"
@mouseup="stopRecording"
@touchstart="startRecording"
@touchend="stopRecording"
>
{{ isRecording ? '停止录音' : '长按录音' }}
</button>
</template>
<script setup>
const isRecording = ref(false);
let recordTimeout;
const startRecording = () => {
recordTimeout = setTimeout(() => {
isRecording.value = true;
// 实际录音启动逻辑
}, 500); // 500ms长按判定阈值
};
const stopRecording = () => {
clearTimeout(recordTimeout);
if (isRecording.value) {
// 停止录音逻辑
isRecording.value = false;
}
};
</script>
设计考量:
- 500ms延迟判断防止误触
- 同时支持鼠标和触摸事件
- 状态管理确保录音状态准确
三、百度语音识别API集成方案
1. API调用前准备
- 获取API密钥:在百度智能云控制台创建应用,获取API Key和Secret Key
- 生成访问令牌:
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 response.json();
};
2. 实时语音识别实现
const realTimeRecognition = async (audioBlob) => {
const accessToken = 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('cuid', 'YOUR_DEVICE_ID');
const response = await fetch(`https://vop.baidu.com/pro_api?access_token=${accessToken.access_token}`, {
method: 'POST',
body: formData
});
return response.json();
};
参数说明:
format
:音频格式(支持wav、pcm等)rate
:采样率(建议16000Hz)channel
:声道数(单声道为1)
四、完整流程实现与优化
1. 完整实现示例
<script setup>
import { ref } from 'vue';
const recognitionText = ref('');
const isRecording = ref(false);
let mediaRecorder, audioChunks, stream;
const initAudio = async () => {
try {
const { mediaRecorder: mr, audioChunks: ac, stream: st } = await initRecorder();
mediaRecorder = mr;
audioChunks = ac;
stream = st;
} catch (err) {
console.error('音频初始化失败', err);
}
};
const startRecording = async () => {
await initAudio();
mediaRecorder.start(1000); // 每1秒收集一次数据
isRecording.value = true;
// 模拟实时转换(实际项目替换为API调用)
const interval = setInterval(() => {
if (audioChunks.length > 0) {
const blob = new Blob(audioChunks, { type: 'audio/wav' });
// 这里应调用百度API
recognitionText.value += ' [模拟转换结果] ';
audioChunks = []; // 清空已处理片段
}
}, 1000);
return () => {
clearInterval(interval);
mediaRecorder.stop();
stream.getTracks().forEach(track => track.stop());
};
};
const stopRecording = () => {
mediaRecorder.stop();
stream.getTracks().forEach(track => track.stop());
isRecording.value = false;
// 最终转换
convertFinalAudio();
};
const convertFinalAudio = async () => {
if (audioChunks.length === 0) return;
const blob = new Blob(audioChunks, { type: 'audio/wav' });
// const result = await realTimeRecognition(blob); // 实际API调用
// recognitionText.value = result.result;
recognitionText.value += ' [最终转换结果] ';
};
</script>
2. 性能优化策略
音频预处理:
- 使用Web Audio API进行降噪处理
- 统一采样率为16000Hz(百度API推荐)
API调用优化:
- 实现请求队列管理,避免频繁调用
- 添加重试机制处理网络波动
用户体验优化:
- 添加录音音量可视化
- 实现转换结果逐字显示动画
五、部署与安全注意事项
六、扩展应用场景
会议记录系统:
- 结合WebSocket实现多人语音转写
- 添加说话人识别功能
语音输入法:
- 优化短语音的转换速度
- 添加候选词联想功能
教育领域应用:
- 实现课堂语音实时转写
- 添加关键词高亮功能
本方案通过Vue3的响应式特性与百度语音识别API的深度集成,提供了稳定可靠的语音转文本解决方案。实际开发中需注意API调用频率限制(百度API免费版有QPS限制),建议添加本地缓存机制提升用户体验。对于高并发场景,可考虑使用WebSocket长连接实现更高效的实时转换。
发表评论
登录后可评论,请前往 登录 或 注册