一、百度短语音识别API简介
百度短语音识别API是百度智能云提供的语音转文本服务,支持实时或离线语音输入,通过RESTful接口快速返回识别结果。其核心优势包括:
- 高精度识别:基于深度学习模型,适应多种口音和场景。
- 低延迟响应:短语音(≤60秒)处理耗时短,适合实时交互场景。
- 多语言支持:覆盖中文、英文及中英文混合识别。
- 简单集成:提供JavaScript SDK,兼容浏览器和Node.js环境。
二、环境准备与前提条件
1. 百度智能云账号注册与认证
- 访问百度智能云官网,完成实名认证。
- 开通“语音识别”服务,获取API Key和Secret Key(用于身份验证)。
2. 开发环境要求
- 浏览器端:支持WebRTC的现代浏览器(Chrome/Firefox/Edge)。
- Node.js端:需安装
axios或fetch库处理HTTP请求。 - 网络要求:确保设备可访问百度API服务器(无防火墙拦截)。
三、JavaScript调用流程详解
1. 获取访问令牌(Access Token)
百度API采用OAuth2.0认证,需通过API Key和Secret Key换取Token:
async function getAccessToken(apiKey, secretKey) {const url = 'https://aip.baidubce.com/oauth/2.0/token';const params = new URLSearchParams({grant_type: 'client_credentials',client_id: apiKey,client_secret: secretKey});const response = await fetch(`${url}?${params}`);const data = await response.json();return data.access_token; // 返回Token,有效期30天}
关键点:
- Token需缓存,避免频繁请求导致限流。
- 错误处理:检查
data.error字段,如invalid_client表示密钥错误。
2. 录音与音频数据准备
浏览器端录音(WebRTC API)
async function startRecording() {const stream = await navigator.mediaDevices.getUserMedia({ audio: true });const mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/wav' });const audioChunks = [];mediaRecorder.ondataavailable = (event) => {audioChunks.push(event.data);};mediaRecorder.start(100); // 每100ms收集一次数据return { stream, mediaRecorder, audioChunks };}async function stopRecording(mediaRecorder, audioChunks) {mediaRecorder.stop();mediaRecorder.stream.getTracks().forEach(track => track.stop());const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });return audioBlob;}
注意事项:
- 需用户授权麦克风权限。
- 推荐采样率16kHz、单声道、16bit PCM格式(百度API兼容性最佳)。
Node.js端音频读取
若处理本地文件,可使用fs模块:
const fs = require('fs');function readAudioFile(filePath) {return fs.readFileSync(filePath); // 返回Buffer}
3. 调用短语音识别API
浏览器端上传(FormData)
async function recognizeSpeech(accessToken, audioBlob) {const formData = new FormData();formData.append('audio', audioBlob, 'recording.wav');formData.append('format', 'wav');formData.append('rate', 16000); // 采样率formData.append('dev_pid', 1537); // 中文普通话识别模型const response = await fetch(`https://vop.baidu.com/server_api?access_token=${accessToken}`, {method: 'POST',body: formData});const result = await response.json();return result; // 返回{ result: ['识别文本'] }}
Node.js端上传(axios)
const axios = require('axios');async function recognizeSpeechNode(accessToken, audioBuffer) {const url = `https://vop.baidu.com/server_api?access_token=${accessToken}`;const formData = new FormData(); // 或手动构造multipart/form-dataformData.append('audio', audioBuffer, { filename: 'audio.wav' });formData.append('format', 'wav');formData.append('rate', 16000);const response = await axios.post(url, formData, {headers: { 'Content-Type': 'multipart/form-data' }});return response.data;}
参数说明:
dev_pid:识别模型ID(如1537=中文普通话,1737=英文)。cuid:可选,设备唯一标识(用于限流)。
四、错误处理与优化建议
1. 常见错误及解决方案
- 错误码40002:Token无效或过期 → 重新获取Token。
- 错误码40004:音频格式不支持 → 确保为WAV/PCM/AMR等格式。
- 错误码500:服务器内部错误 → 稍后重试或检查日志。
2. 性能优化技巧
- 压缩音频:使用
opus编码减少上传体积(需API支持)。 - 分片上传:长语音拆分为多个短语音请求。
- 本地预处理:降噪、静音切除提升识别率。
五、完整示例:浏览器端实时语音识别
<!DOCTYPE html><html><head><title>百度语音识别Demo</title></head><body><button id="startBtn">开始录音</button><button id="stopBtn" disabled>停止录音</button><div id="result"></div><script>let mediaRecorder, audioChunks = [];const apiKey = 'YOUR_API_KEY';const secretKey = 'YOUR_SECRET_KEY';let accessToken = '';// 获取Tokenasync function init() {accessToken = await getAccessToken(apiKey, secretKey);}// 录音控制document.getElementById('startBtn').addEventListener('click', async () => {const { stream, mediaRecorder: mr, audioChunks: chunks } = await startRecording();mediaRecorder = mr;audioChunks = chunks;document.getElementById('stopBtn').disabled = false;});document.getElementById('stopBtn').addEventListener('click', async () => {const audioBlob = await stopRecording(mediaRecorder, audioChunks);const result = await recognizeSpeech(accessToken, audioBlob);document.getElementById('result').innerText = result.result[0] || '识别失败';document.getElementById('stopBtn').disabled = true;});// 前文定义的getAccessToken、startRecording、stopRecording、recognizeSpeech函数init();</script></body></html>
六、总结与扩展应用
百度短语音识别API的JavaScript调用适合以下场景:
- 智能客服系统(语音转文本输入)。
- 语音笔记应用(实时记录会议内容)。
- 智能家居控制(语音指令识别)。
下一步建议:
- 结合百度自然语言处理API实现语义分析。
- 在移动端使用Cordova/React Native封装为原生组件。
- 监控API调用量,避免超出免费额度(每月500次免费)。
通过本文,开发者可快速掌握百度短语音识别API的JavaScript集成方法,并根据实际需求调整参数和错误处理逻辑。