共计 2425 个字符,预计需要花费 7 分钟才能阅读完成。
1. AutoJS 语音识别基本原理与适用场景
AutoJS 是基于 JavaScript 的 Android 自动化工具,其语音识别功能通过调用系统 API 实现。核心流程为:麦克风采集音频→转换为文本→触发脚本动作。典型应用场景包括:

- 语音控制自动化任务(如 ” 打开微信 ”)
- 无障碍辅助操作(视障用户指令)
- 语音数据采集(会议记录转写)
2. 环境搭建与权限配置
2.1 基础环境准备
- 安装 AutoJS 4.1.1 以上版本(推荐官网下载)
- 开启手机 USB 调试模式
- 连接电脑调试或使用 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 响应速度优化
-
预加载语音模型:
// 脚本启动时预加载 let recognizer = speech.createRecognizer(); recognizer.setLanguage("zh-CN"); -
使用离线识别模式:
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;
}
}
}
});
实践练习建议
- 基础练习:实现语音控制相册应用(” 拍照 ”、” 查看照片 ”)
- 中级挑战:开发语音密码锁(说出特定短语解锁)
- 高级项目:创建语音记账系统(识别 ” 早餐 15 元 ” 自动记录)
调试技巧:
– 使用 console.log() 输出中间结果
– 在安静环境测试初始版本
– 先测试固定短语再尝试自然语言
遇到问题可查阅:
– AutoJS 官方文档
– Android Speech API 文档
– GitHub 上的开源示例项目
正文完
发表至: 技术教程
近一天内
