在uniapp中使用百度语音识别技术创建简易录音器

一、项目背景与需求分析

随着移动端语音交互场景的普及,录音与语音识别功能已成为众多应用的标配。在uniapp中实现这一功能,可同时覆盖iOS、Android及小程序等多平台。百度语音识别API凭借其高准确率和低延迟特性,成为开发者首选的语音处理工具。本方案将通过uniapp的录音插件与百度语音识别API结合,构建一个支持实时录音、语音转文字的简易工具。

1.1 技术选型依据

  • uniapp跨平台优势:一次开发多端运行,降低开发成本。
  • 百度语音识别API:提供高精度语音转文字服务,支持中英文混合识别。
  • 录音插件兼容性:uniapp官方插件市场提供跨平台录音组件,兼容各端权限管理。

二、环境准备与依赖安装

2.1 百度语音识别API开通

  1. 登录百度智能云控制台,创建语音识别应用。
  2. 获取APP_IDAPI_KEYSECRET_KEY三个关键参数。
  3. 确保账户余额充足(API调用按量计费)。

2.2 uniapp项目配置

  1. 使用HBuilderX创建uniapp项目,选择”默认模板”。
  2. 安装录音管理插件:

    1. npm install @dcloudio/uni-ui --save
    2. # 或通过HBuilderX插件市场安装"录音管理"插件
  3. 配置manifest.json权限:

    1. {
    2. "mp-weixin": {
    3. "requiredPrivateInfos": ["chooseAudio"]
    4. },
    5. "app-plus": {
    6. "permissions": ["RECORD"]
    7. }
    8. }

三、核心功能实现

3.1 录音功能开发

使用uni-app的uni.getRecorderManagerAPI实现基础录音:

  1. // pages/recorder/recorder.vue
  2. export default {
  3. data() {
  4. return {
  5. recorderManager: null,
  6. audioPath: '',
  7. isRecording: false
  8. }
  9. },
  10. onLoad() {
  11. this.recorderManager = uni.getRecorderManager();
  12. this.recorderManager.onStop((res) => {
  13. this.audioPath = res.tempFilePath;
  14. this.uploadToBaidu(); // 录音停止后自动触发识别
  15. });
  16. },
  17. methods: {
  18. startRecord() {
  19. this.recorderManager.start({
  20. format: 'mp3',
  21. duration: 60000 // 最大录音时长60秒
  22. });
  23. this.isRecording = true;
  24. },
  25. stopRecord() {
  26. this.recorderManager.stop();
  27. this.isRecording = false;
  28. }
  29. }
  30. }

3.2 百度语音识别集成

3.2.1 获取Access Token

  1. // utils/baidu-auth.js
  2. export async function getAccessToken(apiKey, secretKey) {
  3. const res = await uni.request({
  4. url: 'https://aip.baidubce.com/oauth/2.0/token',
  5. method: 'POST',
  6. data: {
  7. grant_type: 'client_credentials',
  8. client_id: apiKey,
  9. client_secret: secretKey
  10. }
  11. });
  12. return res.data.access_token;
  13. }

3.2.2 语音识别请求

  1. // utils/baidu-asr.js
  2. export async function recognizeSpeech(token, audioPath) {
  3. // 1. 将录音文件转为base64
  4. const fileRes = await uni.getFileSystemManager().readFile({
  5. filePath: audioPath,
  6. encoding: 'base64'
  7. });
  8. // 2. 构造请求参数
  9. const params = {
  10. format: 'mp3',
  11. rate: 16000, // 采样率需与录音配置一致
  12. channel: 1,
  13. token: token,
  14. cuid: 'UNIAPP_' + Math.random().toString(36).substr(2),
  15. speech: fileRes.data
  16. };
  17. // 3. 发送识别请求
  18. const res = await uni.request({
  19. url: 'https://vop.baidu.com/server_api',
  20. method: 'POST',
  21. header: {
  22. 'Content-Type': 'application/json'
  23. },
  24. data: params
  25. });
  26. return res.data.result; // 返回识别结果数组
  27. }

3.3 完整调用流程

  1. // 在recorder.vue中添加
  2. methods: {
  3. async uploadToBaidu() {
  4. try {
  5. const token = await getAccessToken(
  6. '您的API_KEY',
  7. '您的SECRET_KEY'
  8. );
  9. const result = await recognizeSpeech(token, this.audioPath);
  10. uni.showModal({
  11. title: '识别结果',
  12. content: result[0],
  13. showCancel: false
  14. });
  15. } catch (e) {
  16. console.error('识别失败:', e);
  17. uni.showToast({ title: '识别失败', icon: 'none' });
  18. }
  19. }
  20. }

四、关键问题解决方案

4.1 跨平台兼容性处理

  • iOS录音限制:需在info.plist中添加NSMicrophoneUsageDescription权限描述
  • Android权限申请:动态申请RECORD_AUDIO权限
    1. // 动态权限申请示例
    2. async checkPermission() {
    3. const res = await uni.authorize({
    4. scope: 'scope.record'
    5. });
    6. if (!res) {
    7. uni.showModal({
    8. content: '需要录音权限',
    9. success: (res) => {
    10. if (res.confirm) {
    11. uni.openSetting();
    12. }
    13. }
    14. });
    15. }
    16. }

4.2 性能优化策略

  1. 录音分段处理:对超过60秒的录音进行分段识别
  2. 结果缓存:本地存储最近10条识别记录
  3. 网络异常处理:设置3次重试机制

五、完整项目结构建议

  1. /project-root
  2. ├── /pages
  3. └── recorder/ # 录音器页面
  4. ├── /utils
  5. ├── baidu-auth.js # 认证相关
  6. └── baidu-asr.js # 语音识别
  7. ├── /static
  8. └── icons/ # 界面图标
  9. └── manifest.json # 权限配置

六、扩展功能建议

  1. 实时语音识别:使用WebSocket实现流式识别
  2. 多语言支持:通过lang参数切换识别语言
  3. 语音合成:集成百度TTS实现录音回放

七、常见问题排查

  1. 403错误:检查Token是否过期,API配额是否充足
  2. 录音无声:确认采样率设置为16000Hz
  3. iOS无法录音:检查真机调试权限设置

通过以上步骤,开发者可在uniapp中快速构建一个功能完整的语音录音识别工具。实际开发中建议先在测试环境验证API调用,再逐步完善异常处理和用户体验优化。百度语音识别API的详细参数说明可参考官方文档。