百度短语音识别API:JavaScript调用全流程指南

一、百度短语音识别API简介

百度短语音识别API是百度智能云提供的语音转文本服务,支持实时或离线语音输入,通过RESTful接口快速返回识别结果。其核心优势包括:

  • 高精度识别:基于深度学习模型,适应多种口音和场景。
  • 低延迟响应:短语音(≤60秒)处理耗时短,适合实时交互场景。
  • 多语言支持:覆盖中文、英文及中英文混合识别。
  • 简单集成:提供JavaScript SDK,兼容浏览器和Node.js环境。

二、环境准备与前提条件

1. 百度智能云账号注册与认证

  • 访问百度智能云官网,完成实名认证。
  • 开通“语音识别”服务,获取API KeySecret Key(用于身份验证)。

2. 开发环境要求

  • 浏览器端:支持WebRTC的现代浏览器(Chrome/Firefox/Edge)。
  • Node.js端:需安装axiosfetch库处理HTTP请求。
  • 网络要求:确保设备可访问百度API服务器(无防火墙拦截)。

三、JavaScript调用流程详解

1. 获取访问令牌(Access Token)

百度API采用OAuth2.0认证,需通过API Key和Secret Key换取Token:

  1. async function getAccessToken(apiKey, secretKey) {
  2. const url = 'https://aip.baidubce.com/oauth/2.0/token';
  3. const params = new URLSearchParams({
  4. grant_type: 'client_credentials',
  5. client_id: apiKey,
  6. client_secret: secretKey
  7. });
  8. const response = await fetch(`${url}?${params}`);
  9. const data = await response.json();
  10. return data.access_token; // 返回Token,有效期30天
  11. }

关键点

  • Token需缓存,避免频繁请求导致限流。
  • 错误处理:检查data.error字段,如invalid_client表示密钥错误。

2. 录音与音频数据准备

浏览器端录音(WebRTC API)

  1. async function startRecording() {
  2. const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  3. const mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/wav' });
  4. const audioChunks = [];
  5. mediaRecorder.ondataavailable = (event) => {
  6. audioChunks.push(event.data);
  7. };
  8. mediaRecorder.start(100); // 每100ms收集一次数据
  9. return { stream, mediaRecorder, audioChunks };
  10. }
  11. async function stopRecording(mediaRecorder, audioChunks) {
  12. mediaRecorder.stop();
  13. mediaRecorder.stream.getTracks().forEach(track => track.stop());
  14. const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
  15. return audioBlob;
  16. }

注意事项

  • 需用户授权麦克风权限。
  • 推荐采样率16kHz、单声道、16bit PCM格式(百度API兼容性最佳)。

Node.js端音频读取

若处理本地文件,可使用fs模块:

  1. const fs = require('fs');
  2. function readAudioFile(filePath) {
  3. return fs.readFileSync(filePath); // 返回Buffer
  4. }

3. 调用短语音识别API

浏览器端上传(FormData)

  1. async function recognizeSpeech(accessToken, audioBlob) {
  2. const formData = new FormData();
  3. formData.append('audio', audioBlob, 'recording.wav');
  4. formData.append('format', 'wav');
  5. formData.append('rate', 16000); // 采样率
  6. formData.append('dev_pid', 1537); // 中文普通话识别模型
  7. const response = await fetch(`https://vop.baidu.com/server_api?access_token=${accessToken}`, {
  8. method: 'POST',
  9. body: formData
  10. });
  11. const result = await response.json();
  12. return result; // 返回{ result: ['识别文本'] }
  13. }

Node.js端上传(axios)

  1. const axios = require('axios');
  2. async function recognizeSpeechNode(accessToken, audioBuffer) {
  3. const url = `https://vop.baidu.com/server_api?access_token=${accessToken}`;
  4. const formData = new FormData(); // 或手动构造multipart/form-data
  5. formData.append('audio', audioBuffer, { filename: 'audio.wav' });
  6. formData.append('format', 'wav');
  7. formData.append('rate', 16000);
  8. const response = await axios.post(url, formData, {
  9. headers: { 'Content-Type': 'multipart/form-data' }
  10. });
  11. return response.data;
  12. }

参数说明

  • dev_pid:识别模型ID(如1537=中文普通话,1737=英文)。
  • cuid:可选,设备唯一标识(用于限流)。

四、错误处理与优化建议

1. 常见错误及解决方案

  • 错误码40002:Token无效或过期 → 重新获取Token。
  • 错误码40004:音频格式不支持 → 确保为WAV/PCM/AMR等格式。
  • 错误码500:服务器内部错误 → 稍后重试或检查日志。

2. 性能优化技巧

  • 压缩音频:使用opus编码减少上传体积(需API支持)。
  • 分片上传:长语音拆分为多个短语音请求。
  • 本地预处理:降噪、静音切除提升识别率。

五、完整示例:浏览器端实时语音识别

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>百度语音识别Demo</title>
  5. </head>
  6. <body>
  7. <button id="startBtn">开始录音</button>
  8. <button id="stopBtn" disabled>停止录音</button>
  9. <div id="result"></div>
  10. <script>
  11. let mediaRecorder, audioChunks = [];
  12. const apiKey = 'YOUR_API_KEY';
  13. const secretKey = 'YOUR_SECRET_KEY';
  14. let accessToken = '';
  15. // 获取Token
  16. async function init() {
  17. accessToken = await getAccessToken(apiKey, secretKey);
  18. }
  19. // 录音控制
  20. document.getElementById('startBtn').addEventListener('click', async () => {
  21. const { stream, mediaRecorder: mr, audioChunks: chunks } = await startRecording();
  22. mediaRecorder = mr;
  23. audioChunks = chunks;
  24. document.getElementById('stopBtn').disabled = false;
  25. });
  26. document.getElementById('stopBtn').addEventListener('click', async () => {
  27. const audioBlob = await stopRecording(mediaRecorder, audioChunks);
  28. const result = await recognizeSpeech(accessToken, audioBlob);
  29. document.getElementById('result').innerText = result.result[0] || '识别失败';
  30. document.getElementById('stopBtn').disabled = true;
  31. });
  32. // 前文定义的getAccessToken、startRecording、stopRecording、recognizeSpeech函数
  33. init();
  34. </script>
  35. </body>
  36. </html>

六、总结与扩展应用

百度短语音识别API的JavaScript调用适合以下场景:

  • 智能客服系统(语音转文本输入)。
  • 语音笔记应用(实时记录会议内容)。
  • 智能家居控制(语音指令识别)。

下一步建议

  1. 结合百度自然语言处理API实现语义分析。
  2. 在移动端使用Cordova/React Native封装为原生组件。
  3. 监控API调用量,避免超出免费额度(每月500次免费)。

通过本文,开发者可快速掌握百度短语音识别API的JavaScript集成方法,并根据实际需求调整参数和错误处理逻辑。