ZOYKUHot Board

yc-2018/doubaovoiceime技術ドキュメント

独立版豆包语音输入:按住快捷键说话,松开自动输入,支持托盘、可配置快捷键、开机自启

言語フォールバック:本リポジトリの日本語ドキュメントはまだ提供されていないため、原文の公式英語ドキュメント(English)を表示しています。
クイックインストール
pip install doubaovoiceime

豆包语音输入(独立版)

把豆包输入法里的语音转文字能力单独抽出来的 Windows 小工具:按住快捷键说话,松开后文字直接输入到当前光标处,不用切换输入法;也可以切换成按一次开始、再按一次结束的免按模式,或点一下悬浮按钮直接说话。除豆包本地 SDK 外,还用纯 Python 重写了豆包云端 API、千问、微信输入法、百度输入法和讯飞的云端识别协议,六种引擎可在设置中切换。

功能

  • 识别引擎可切换:豆包(本地 DLL)、豆包(云端 API)、千问、微信输入法、百度输入法、讯飞;云端引擎无需登录
  • 测试全部引擎:在设置里点“测试全部引擎”,同一段话同时交给六个引擎识别,并显示各自耗时与最快/最慢
  • 长按说话、松开输入,Esc 取消;轻点一下会自动忽略,不会上传识别;也支持免按模式(按一次开始,再按热键、任意键或鼠标键结束)
  • 实时转录浮层,边说边看;圆角半透明样式,聆听时音波随音量实时跳动
  • 悬浮按钮(默认关闭):单击开始说话、再单击结束,可自由拖动、右键隐藏,不抢焦点
  • 默认快捷键 右 Alt,可改成组合键、单功能键或鼠标中键/侧键
  • 图形设置窗口:标题显示版本号,输入方式、快捷键、麦克风、文字格式、开机自启集中配置
  • 麦克风可选自动检测或指定设备
  • 文字格式可调:标点展示、汉字与数字/英文之间是否加空格、按句末标点自动分段
  • 热词替换:识别结果中出现指定词时自动替换成另一个词;可在设置里添加,也可直接编辑 hotwords.txt
  • 智能文字整理:识别结果先照常输入,再自动排版、纠错、润色;按 Ctrl+Z 可恢复原文
  • 选中文字整理:选中一段文字后按自定义快捷键(默认未设置),原地排版、纠错、润色;选中不足 5 字不处理,Ctrl+Z 可恢复原文
  • 输入结果校验:文字没进输入框时自动复制到剪贴板,不会丢
  • 麦克风策略可切换:麦克风预热(默认,空闲时保持连接,延迟最低),或仅在录音时打开、结束即关闭(系统麦克风指示器只在录音时亮)
  • 托盘图标与菜单:设置、设置语音快捷键、设置整理快捷键、开机自启、麦克风预热、显示悬浮按钮、智能文字整理、打开日志文件夹、退出
  • 单实例运行,重复启动会提示
  • 无控制台窗口,开机自启不打扰
  • 绿色单文件,无需安装

单个版本,约 15 MB,包含六种识别引擎和智能文字整理,无需安装豆包输入法,也不依赖任何豆包运行时文件。

界面

按住快捷键说话时,屏幕底部浮层实时显示识别文字。浮层为圆角半透明样式,左侧音波随音量实时跳动:音波在动但长时间不出文字,多为引擎或网络问题;音波完全不动,多为麦克风问题。

聆听中

松开按键后等待最终结果:

识别中

输入成功:

输入完成

注入失败时自动把文字放进剪贴板:

注入失败

悬浮按钮(在设置或托盘菜单开启):单击开始说话,再单击结束;录音中按钮变为浅蓝色描边:

悬浮按钮(空闲) 悬浮按钮(录音中)

托盘右键菜单:

托盘菜单

使用

  1. 从 Releases 下载 DoubaoVoice.exe
  2. 双击运行,出现托盘图标即已就绪
  3. 在任意输入框里按住 右 Alt(或你设置的快捷键)说话,松开后自动输入;按 Esc 取消本次录音
  4. 想免按说话时,在设置或托盘菜单开启悬浮按钮:单击开始录音,再单击结束;按钮可拖到屏幕任意位置,右键隐藏
  5. 右击托盘图标选择“设置…”可集中调整输入方式、快捷键、麦克风、文字格式、热词替换与整理快捷键;托盘菜单也可快速设置语音/整理快捷键、开机自启、麦克风预热或退出
  6. 选中文字后按整理快捷键(需先在设置中设置)即可原地整理选中内容

设置

右击托盘图标选择“设置…”,或在启动时加 --settings:

设置窗口

窗口标题带当前版本号(如 v2.2.0),便于确认正在运行的是哪个版本。

  • 语音输入方式:长按说话(默认)或免按模式。长按模式下可设置最短按住(默认 0.25 秒):按住时间短于该值时视为误触,直接忽略,不上传也不识别;设为“不限制”则保留旧行为。免按模式按一次热键开始录音,再按同一热键、任意字母/数字键、空格/回车或鼠标键结束;单按 Ctrl/Alt/Shift 不会结束;录音中按 Esc 取消。
  • 识别引擎:豆包(默认,使用内置 SDK)、豆包(云端 API)、千问(云端 API)、微信输入法(云端 API)、百度输入法(云端 API)、讯飞(云端 API)。切换后立即生效,下一次录音使用新引擎;云端引擎不需要登录或填任何密钥。云端引擎不提供“数字、英文”空格选项,切换到云端后该项自动置灰。点击旁边的“测试全部引擎”可打开测试窗口:按住按钮说话(也可点一下开始、再点一下结束),六个引擎同时识别同一段录音,并显示各自从停止说话到出结果的耗时,以及最快/最慢的引擎。
  • 快捷键:点“更改…”后按下新组合键,必须包含 Ctrl/Alt/Shift,或使用 F1–F12;鼠标中键、侧键(后退/前进)可以单独使用,也可以搭配 Ctrl/Alt/Shift。若侧键被厂商驱动改成了键盘宏,会按键盘键识别。
  • 麦克风:输入设备可自动检测(系统默认)或指定,列表只包含 MME / DirectSound 设备。麦克风预热默认开启:空闲时保持音频流,不上传也不识别,只缓存最近约 0.15 秒用于补上开口瞬间,延迟最低;关闭后只在录音期间打开,系统麦克风指示器随之熄灭,代价是通话/蓝牙设备启动时可能多几十毫秒。
  • 文字格式(下次识别时生效):
    • 标点展示:保留所有标点 / 句末不加句号(只去掉结尾的句号,保留问号、感叹号)/ 句末不加标点 / 空格代替标点
    • 数字、英文:汉字与数字/英文之间是否留空格,由识别服务处理
    • 分段方式:不自动分段(默认)/ 分段后空行 / 分段不空行。程序按识别文本中的句末标点(。!?;等)切段;如果整段只有末尾一个标点,就不会产生多个分段。
  • 热词替换:在“原文”和“替换为”中填写后点“添加”,规则会追加到 exe 同目录的 hotwords.txt;也可以点“打开配置文件”直接编辑。每行一条,格式为 原文 -> 替换为(也支持 => 和 →),以 # 开头的行会被忽略。替换在最终文字注入前执行,较长规则优先;智能整理后的文字也会再次套用。修改文件后,下次识别自动生效,无需重启。
  • 智能文字整理(默认关闭):语音输入完成后,把识别结果交给豆包服务做排版、纠错、润色,再用整理后的文字替换刚输入的内容。整理后按 Ctrl+Z 可恢复原文。仅在文字确实发生变化时才替换;替换前会确认仍停留在原来的输入框,用户中途按键、点鼠标或切换窗口都会放弃替换。
  • 整理快捷键(默认未设置):先在任意输入框选中一段文字,再按这个快捷键,程序会复制选区、交给豆包服务整理,然后用结果替换选区。选中文字不足 5 字时不会处理,超过 12000 字会提示过长。处理期间会用剪贴板临时复制和粘贴,结束后恢复原来的剪贴板文字。按快捷键时请先松开快捷键再等待结果;如果整理期间窗口被切换或你继续输入,结果会改为复制到剪贴板。整理快捷键不能与语音快捷键冲突,也不能设为 Ctrl+Z。
  • 悬浮按钮(默认关闭):开启后在屏幕右下角显示圆形按钮,单击开始说话、再单击结束,等同免按模式;按住拖动可移到任意位置,位置自动保存;右键按钮隐藏。按钮不激活、不抢焦点,不影响当前输入框。托盘菜单的“显示悬浮按钮”与设置里的勾选同步。
  • 开机自启:写入当前用户的启动项。

设置保存在 exe 同目录的 config.json,热词规则保存在同目录的 hotwords.txt。config.json 对应字段:voice_mode(hold / hands_free)、min_hold_ms(0 / 150 / 250 / 400)、hotkey、mic_device、mic_mode(always / press)、punctuation_mode(keep_all / remove_period / remove_trailing / space_replace)、zh_space、paragraph_mode(none / blank / single)、smart_text、smart_hotkey(空字符串表示未设置)、asr_engine(doubao / doubao_api / qwen / wetype / baidu / ifly)、float_visible(true / false)、float_pos([x, y] 屏幕坐标)。

麦克风默认预热,Windows 的麦克风使用指示器会一直亮着。它不会在空闲时上传或识别,按下快捷键后才开始录音,并补上开口前的约 0.15 秒缓存。不需要常亮指示器时可在设置中取消“麦克风预热”,之后只在录音期间打开麦克风,松开就关闭,指示器随之熄灭;代价是每次按下要花几十毫秒打开设备(蓝牙耳麦更久),开口的第一瞬间可能漏掉一点。

六种引擎都在各自厂商的服务器完成识别,需要联网。豆包本地引擎走内置 SDK(与豆包输入法同一通道);豆包云端、千问、微信输入法、百度输入法与讯飞引擎是按官方客户端协议直接连接云端,不需要安装对应输入法,也不需要登录。如果听不到声音,检查“设置 → 隐私 → 麦克风”是否允许桌面应用访问麦克风。

云端引擎首次使用会在 exe 同目录生成设备标识:千问为 qwen.json(随机设备 ID),微信输入法为 wetype.json(匿名设备注册得到的设备码与 UIN),百度输入法为 baidu.json(随机 CUID),豆包云端为 doubao_api.json(匿名设备注册得到的设备 ID 与机型指纹),均不包含账号、密码或手机号。录音只发送给当前选中的识别引擎;切换引擎后,旧引擎不会收到新的录音。

开启“智能文字整理”后,识别出的文字还会发送到豆包服务做二次处理;使用整理快捷键时,选中的文字也会发送到同一服务。程序直接用纯 HTTP 调用豆包输入法的文字整理接口,不内置或解压豆包运行时,也不需要安装豆包输入法。接口只接收本次文字,不包含账号信息。

构建

环境:Windows x64、Python 3.11。

pip install -r requirements.txt
python -m PyInstaller --noconfirm --clean DoubaoVoice_new.spec

产物为 dist\DoubaoVoice.exe。app/dll 内的两个豆包语音 DLL 随 exe 一起打包,供豆包本地引擎使用;app/opus.dll(libopus 1.6.1)供豆包云端、微信、百度三个云端引擎做 Opus 编码,许可信息见 THIRD_PARTY_NOTICES.md。推送 v* 标签时 GitHub Actions 会构建并发布 Release。

命令行参数

程序是无控制台的 GUI 程序,参数只在本次启动生效,屏幕上不会有文字输出;识别结果显示在悬浮窗,详细信息写入 exe 同目录的 logs\voice_ime-YYYY-MM-DD.log(按天分文件)。

参数 说明
--device N 指定麦克风设备编号,默认用系统默认设备
--wav FILE 用 wav 文件代替麦克风(需 16kHz、单声道、16bit)
--engine doubao|doubao_api|qwen|wetype|baidu|ifly 本次启动使用哪个识别引擎,不写入设置
--once 启动后立即识别一次并退出,必须配合 --wav
--inject unicode|paste 文字注入方式:逐字模拟键盘(默认)/ 剪贴板粘贴
--no-inject 只识别不输入
--no-ui 不显示悬浮提示
--no-tray 不显示托盘图标(日常不建议,退出只能靠任务管理器)
--settings 启动时打开设置窗口
--verbose 日志记录每个中间识别结果

常用示例,在 exe 所在目录执行:

:: 测试识别:不碰麦克风、不注入,结果看日志
.\DoubaoVoice.exe --once --wav "D:\doubao_work\asr16k.wav" --no-inject --no-ui --no-tray --verbose

:: 用云端引擎测试识别(doubao_api / qwen / wetype / baidu / ifly)
.\DoubaoVoice.exe --once --wav "D:\doubao_work\asr16k.wav" --engine doubao_api --no-inject --no-ui --no-tray --verbose
.\DoubaoVoice.exe --once --wav "D:\doubao_work\asr16k.wav" --engine baidu --no-inject --no-ui --no-tray --verbose

:: 指定第 2 个麦克风
.\DoubaoVoice.exe --device 2

:: 某些软件收不到模拟输入时,改用剪贴板粘贴
.\DoubaoVoice.exe --inject paste

:: 只识别不输入,悬浮窗显示识别结果
.\DoubaoVoice.exe --no-inject

补充说明:

  • 设备编号可以用 python -c "import sounddevice as sd; print(sd.query_devices())" 查看,输出每行开头的数字就是编号;启动后日志也会打印实际使用的设备名。
  • 带 --wav 的测试会跳过单实例检查,正常程序开着也能同时运行。
  • 注入失败时(无论哪种注入方式)文字都会自动复制到剪贴板,不会丢。
  • 开机自启固定以无参数方式启动。想固定使用某个参数,需要在 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 里手动给命令追加参数,或做一个带参数的快捷方式。
  • PowerShell 启动 GUI 程序不会等待结束;需要等待时可使用 Start-Process -FilePath .\DoubaoVoice.exe -ArgumentList '...' -Wait,Git Bash 中直接运行会等待。

目录结构

app/voice_ime.py        主程序(键盘/鼠标钩子、录音、ASR、文字注入、设置窗口、托盘、开机自启)
app/api_common.py       云端引擎公共件(protobuf、snappy、AES、WebSocket、HTTP、Opus 封装)
app/api_doubao.py       豆包云端识别
app/api_qwen.py         千问云端识别
app/api_wetype.py       微信输入法云端识别
app/api_baidu.py        百度输入法云端识别
app/api_ifly.py         讯飞云端识别
app/api_smart.py        豆包文字整理接口
app/opus.dll            云端引擎用 Opus 编码器(libopus,BSD)
app/dll/                豆包 SAMI Core SDK
app/icon.ico            程序与托盘图标
app/float.ico           悬浮按钮图标
DoubaoVoice_new.spec    PyInstaller 打包配置
tools/                  逆向分析辅助脚本
THIRD_PARTY_NOTICES.md  第三方组件许可

运行日志按天保存在 exe 同目录的 logs\ 文件夹(voice_ime-YYYY-MM-DD.log);配置、热词规则和云端引擎的设备标识保存在 exe 同目录:config.json、hotwords.txt、qwen.json、wetype.json、baidu.json、doubao_api.json。

致谢

云端识别引擎(豆包云端、千问、微信输入法、百度输入法、讯飞)的协议细节与实现思路参考了 J3n5en/voicekey,感谢原作者对输入法语音协议的研究与公开分享。VoiceKey 仓库目前未附带 LICENSE;本项目仅参考其协议思路与参数,相关代码按本项目结构重写,未直接复制其代码,也不包含其任何文件。

注意

  • 非官方项目。豆包本地识别调用豆包输入法内置的 SDK 与凭据;豆包云端、千问、微信输入法、百度输入法与讯飞识别是按各自官方客户端的行为重写的协议实现,其中讯飞使用客户端内置的 APPID/API Key/Secret,其余复用客户端公开标识或匿名设备注册,与字节跳动、阿里、腾讯、百度、科大讯飞均无关联。账号与数据使用受对应服务条款约束。
  • 云端识别协议可能随官方客户端更新发生变化,若某引擎突然失败,可先切换到其他引擎,再打开日志文件夹定位。
  • 仅供个人学习使用,请勿分发 app/dll 中的豆包 SDK 文件。
  • 快捷键没反应时先看托盘菜单的“打开日志文件夹”里的当天日志,常见原因是组合键被其他软件占用。
GitHub 公式リポジトリからアーカイブされたドキュメントミラー · GitHub リポジトリを表示
スナップショット取得日: 2026-11-13