annyang
让网页开口说话——2KB零依赖的浏览器端语音命令库,3分钟集成任意网站
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让网页开口说话——2KB零依赖的浏览器端语音命令库,3分钟集成任意网站
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有想过,对着电脑说话就能操控网页?不用点按钮,不用填表单,张嘴就来——annyang 正是这样一款让网站「听懂」用户语音指令的开源 JavaScript 库。只需两行代码,你的网页就能支持语音交互,从导航到搜索,全靠一张嘴。
annyang 由独立开发者 Tal Ater 于 2012 年创建,最初只是他为自己的个人项目添加语音控制功能的小工具。随着 Web Speech API 在浏览器中逐渐成熟,annyang 也成长为最受 Web 开发者欢迎的语音命令库之一。项目托管于 GitHub,目前拥有超过 6800 颗星、1049 次分叉,保持活跃维护。Tal Ater 同时维护着配套的 Speech KITT GUI 框架,形成了完整的语音交互开发生态。
项目定位清晰:不做复杂的企业级语音识别,而是专注于浏览器端的轻量语音命令场景——适合辅助功能增强、无障碍访问、移动端交互、语音导航等需求。

图1:annyang 项目封面
annyang 本身并不实现语音识别算法,而是对浏览器原生 Web Speech API 中的 SpeechRecognition 接口做了优雅的封装。以下是核心技术要点:
语音识别引擎:依赖浏览器内置的语音识别能力。Chrome/Edge 使用 Google 的语音服务,Safari 使用苹果的语音服务。annyang 通过前缀探测(webkitSpeechRecognition / SpeechRecognition)兼容不同浏览器。
命令路由机制:annyang 将用户的语音输入与预定义的正则表达式命令列表进行匹配。例如 'search for *term' 会捕获任意内容作为 term 参数,传入回调函数。这一机制借鉴了 Backbone.js 路由器的设计哲学。
事件驱动架构:通过回调函数体系(addCallback)处理各类事件,包括开始监听(start)、检测到声音(soundstart)、识别结果(result)、命令匹配(resultMatch)、无匹配(resultNoMatch)、各类错误(errorNetwork、errorPermissionDenied 等),形成了完善的状态通知机制。
![]()
图2:annyang 语音识别功能示意
annyang 的 API 设计极为克制,核心功能集中在以下几个方面:
| 功能 | 说明 |
|---|---|
| addCommands() | 注册语音命令,支持具名参数、通配符*、可选参数() |
| start() / abort() / pause() | 启动/停止/暂停语音监听 |
| isSpeechRecognitionSupported() | 检测当前浏览器是否支持语音识别 |
| setLanguage() | 设置识别语言(默认 en-US) |
| addCallback() | 监听各类语音识别事件 |
开发者只需声明命令和回调函数,annyang 自动处理麦克风权限、语音转文字、文字匹配、错误恢复等复杂逻辑。命令支持灵活的模式:
// 精确匹配
annyang.addCommands({ 'hello': () => alert('Hi!') });
// 带参数
annyang.addCommands({ 'search for *term': (term) => doSearch(term) });
// 可选参数
annyang.addCommands({ 'show (me) the (latest) news': () => showNews() });
// 多个同义命令
annyang.addCommands({ 'stop || halt || quit': () => exit() });
annyang 的上手门槛极低,有三种集成方式:
方式一:npm 安装(推荐)
npm install annyang
import annyang from 'annyang';
if (annyang.isSpeechRecognitionSupported()) {
annyang.addCommands({ 'navigate to *page': (p) => router(p) });
annyang.start();
}
方式二:CDN 直接引用(无需构建工具)
<script src="https://cdn.jsdelivr.net/npm/annyang@3/dist/annyang.iife.min.js"></script>
方式三:CommonJS(兼容旧项目)
const { addCommands, start } = require('annyang');
annyang 本身只有 2KB(gzipped),零依赖,是目前最轻量的语音识别库之一。
尽管 annyang 极大降低了语音交互的门槛,但它面临一些本质限制:
浏览器兼容性问题:Web Speech API 并非所有浏览器都支持。在中国常用的部分浏览器(如部分版本的微信内置浏览器)中,语音识别功能可能不可用。annyang 提供了 isSpeechRecognitionSupported() 方法来优雅降级,但开发者仍需做兼容性测试。
隐私与权限:语音识别需要麦克风权限,用户首次访问时会收到浏览器权限提示。部分用户出于隐私顾虑会拒绝授权,此时应用需要提供传统界面的备选方案。
识别准确率:依赖浏览器后端的语音识别服务(Google/Apple),在嘈杂环境、口音较重、或专业术语场景下,识别率可能不理想。
无法离线使用:所有语音识别请求都发送到云端服务,不支持本地离线识别。
Tal Ater 还开发了 Speech KITT,为 annyang 提供图形化界面。Speech KITT 提供:可视化麦克风状态指示、开始/停止控制按钮、语音指令提示卡、自定义主题。annyang + Speech KITT 组合可以快速构建完整的语音交互原型。

图3:配套 GUI 工具 Speech KITT
annyang 的核心贡献不在于技术突破,而在于体验门槛的彻底消解。在 annyang 出现之前,在网页中集成语音识别需要理解复杂的 Web Speech API、处理各种边界情况。annyang 用几十行代码抽象掉了所有这些复杂性,让任何前端开发者都能在几分钟内为网站添加语音能力。
从行业发展角度看,annyang 代表了 Web 平台能力持续增强的大趋势——浏览器正在成为越来越强大的应用运行时,过去需要原生应用才能实现的功能(语音、摄像头、文件系统访问等),现在 Web 应用也能做到。annyang 正是这一趋势的早期实践者。
总结:annyang 是一款精炼、专注的浏览器端语音命令库,通过 npm/CDN 一键集成,2KB 零依赖,API 简洁直观,适合为网页添加轻量语音控制能力。虽然受限于浏览器 Web Speech API 的兼容性,但其极低的学习成本和开箱即用的体验,使其成为 Web 语音交互入门的不二之选。