AutoJS 语音识别入门实战:从环境搭建到避坑指南

1次阅读
没有评论

共计 2425 个字符,预计需要花费 7 分钟才能阅读完成。

image.webp

1. AutoJS 语音识别基本原理与适用场景

AutoJS 是基于 JavaScript 的 Android 自动化工具,其语音识别功能通过调用系统 API 实现。核心流程为:麦克风采集音频→转换为文本→触发脚本动作。典型应用场景包括:

AutoJS 语音识别入门实战:从环境搭建到避坑指南

  • 语音控制自动化任务(如 ” 打开微信 ”)
  • 无障碍辅助操作(视障用户指令)
  • 语音数据采集(会议记录转写)

2. 环境搭建与权限配置

2.1 基础环境准备

  1. 安装 AutoJS 4.1.1 以上版本(推荐官网下载)
  2. 开启手机 USB 调试模式
  3. 连接电脑调试或使用 AutoJS 内置编辑器

2.2 关键权限配置

在脚本开头必须声明以下权限:

// 必须声明的权限
auto.waitFor();
requestPermissions([
  "android.permission.RECORD_AUDIO",
  "android.permission.WRITE_EXTERNAL_STORAGE"
]);

  • 首次运行需手动授予麦克风和存储权限
  • Android 6.0+ 需动态申请权限

3. 核心代码实现

3.1 基础语音识别实现

// 创建语音识别器
let recognizer = speech.createRecognizer();

// 设置识别语言(中文)recognizer.setLanguage("zh-CN");

// 开始监听
recognizer.listen({
  // 识别成功回调
  onResult: function(text) {console.log("识别结果:", text);

    // 示例:语音控制
    if(text.includes("打开支付宝")) {launch("com.eg.android.AlipayGphone");
    }
  },

  // 错误处理
  onError: function(errorCode) {console.error("识别错误:", errorCode);
  }
});

// 保持脚本运行
while(true) {sleep(1000);
}

3.2 带超时控制的改进版

// 带 30 秒超时的语音识别
function voiceCommand(timeout) {return new Promise((resolve, reject) => {let timer = setTimeout(() => {recognizer.cancel();
      reject("识别超时");
    }, timeout || 30000);

    recognizer.listen({
      onResult: text => {clearTimeout(timer);
        resolve(text.trim());
      },
      onError: err => {clearTimeout(timer);
        reject(err);
      }
    });
  });
}

// 使用示例
voiceCommand(5000).then(text => {toast("您说的是:" + text);
}).catch(err => {toast("识别失败:" + err);
});

4. 常见问题解决方案

4.1 权限问题排查

  • 现象:无识别结果
  • 解决步骤:
  • 检查是否弹出权限请求对话框
  • 前往设置→应用管理→AutoJS→权限
  • 确保麦克风和存储权限已开启

4.2 识别准确率优化

  • 背景噪音处理:

    // 设置降噪参数(需 Android 8.0+)recognizer.setParameters({
      "audioSource": 1,  // 麦克风源
      "audioSamplingRate": 16000,
      "audioEncoding": "PCM_16BIT"
    });

  • 关键词过滤:

    // 只响应包含特定关键词的指令
    const KEYWORDS = ["打开", "关闭", "搜索"];
    if(!KEYWORDS.some(kw => text.includes(kw))) {return;}

5. 性能优化建议

5.1 资源占用控制

  • 识别完成后立即释放资源:

    recognizer.cancel();  // 主动停止识别
    recognizer.release(); // 释放资源

  • 避免连续识别:两次识别间隔至少 2 秒

5.2 响应速度优化

  1. 预加载语音模型:

    // 脚本启动时预加载
    let recognizer = speech.createRecognizer();
    recognizer.setLanguage("zh-CN");

  2. 使用离线识别模式:

    recognizer.setParameters({"preferOffline": true});

6. 实际应用案例

6.1 语音记事本

files.ensureDir("/sdcard/VoiceNotes/");

recognizer.listen({
  onResult: text => {let date = new Date();
    let filename = `/sdcard/VoiceNotes/note_${date.getTime()}.txt`;
    files.write(filename, `${date.toLocaleString()}\n${text}`);
    toast("记事已保存");
  }
});

6.2 智能家居控制

const COMMANDS = {"开灯": () => http.get("http://192.168.1.100/on"),
  "关灯": () => http.get("http://192.168.1.100/off")
};

recognizer.listen({
  onResult: text => {for(let cmd in COMMANDS) {if(text.includes(cmd)) {COMMANDS[cmd]();
        break;
      }
    }
  }
});

实践练习建议

  1. 基础练习:实现语音控制相册应用(” 拍照 ”、” 查看照片 ”)
  2. 中级挑战:开发语音密码锁(说出特定短语解锁)
  3. 高级项目:创建语音记账系统(识别 ” 早餐 15 元 ” 自动记录)

调试技巧:
– 使用 console.log() 输出中间结果
– 在安静环境测试初始版本
– 先测试固定短语再尝试自然语言

遇到问题可查阅:
– AutoJS 官方文档
– Android Speech API 文档
– GitHub 上的开源示例项目

正文完
 0
评论(没有评论)