一个人做 Mac 语音输入的九个月:Voilà 的开发故事
为什么要自己做
我在法国工作,平时喜欢写各种小项目,Voilà 是其中做得最久、也最认真的一个,从头到尾是我一个人做的。每天一半的时间在打字:给同事回邮件、回 Slack、开完会写总结,还有和国内的朋友聊天。中文、英文、法语来回切,一句话里夹两三种语言是常态,比如“明天的 meeting 改到三点,on se cale après”。
系统自带的听写和现有的语音输入方案,总有几个地方满足不了我:
- 一句话里混着说。大多数工具要先选定一种语言,中间夹一个英文词,要么认成奇怪的中文,要么整句跑偏。
- 终端里用不了。我很多时间在终端里用 AI 编程工具,写提示词、写 commit message,这些其实都是句子,说比打快得多。可语音输入一到终端,不是没反应,就是字丢了一半。
- 订阅制。一个输入法按月收费,我自己都不愿意买。
所以干脆自己做一个。
时间线
- 2026 年 1 月 7 日,第一行代码。那时候它叫 FlowType。
- 5 月 2 日,1.0 发布。
- 9 月 25 日,中秋节发了 1.6.0,设置界面整个重做,AI 润色也对免费用户开放了。
从 1.0 到 1.6 一共发了 30 个版本,将近一千次提交。回头看 1.0,和现在差的不是一点半点。

这是 1.0 发布当天录的演示:在 Claude Code 里按住快捷键,法语夹着中文说,浮窗边说边出字,松手就进了终端。

几个做下来才知道的细节
0.3 秒里有 0.22 秒是故意等的
Voilà 的用法很简单:按住快捷键(我自己用 ⌥ Tab)说话,浮窗里边说边出字,松手后文字粘贴到光标处。
松手到上屏大约 0.3 秒,实测在 260 到 320 毫秒之间。其中大约 220 毫秒是故意等的:人说完最后一个字,声音其实还没完全结束,立刻截断的话,最后一个字经常被吃掉。宁可慢一点点,也不能丢字。
剩下的时间要尽量省。音频引擎常驻复用,不在每次录音时重建;和识别服务的连接在两次录音之间保持住,省掉每次重新握手的几百毫秒。
终端是最难搞的地方
终端不是普通的文本框。它自己画一个字符网格,很多语音输入工具走系统的辅助功能接口往“当前输入框”里写字,到终端这里就写不进去。Claude Code 这类全屏的终端程序还在不停重绘屏幕,模拟按键很容易被吞掉或者拆开。
Voilà 的做法是在终端里调用它自己的“粘贴”命令,失败了再退回键盘方式。粘贴前先给剪贴板拍一个快照,粘完再恢复,你原来复制的图片、富文本都不会被覆盖。这部分我写了一篇更细的:Mac 终端里怎么语音输入。
混说靠引擎,也靠调教
一句话里中英法混着说,最后选了 Soniox 做默认引擎。我们自己测过一组夹着外语词的句子,24 个外语词认对了 23 个。在此之上再加自定义词汇和纠错规则,产品名、同事的名字这种老是认错的词,加一次就好。
Soniox 是按用量付费的,用户用自己的 API Key,音频从 Mac 直接发过去,不经过我的服务器。怎么申请、大概花多少钱,写在这篇 Soniox 设置说明里:每天说一个小时,一个月也就两美元多。
一次买断,不做订阅
我不想让自己的工具,变成连自己都讨厌的订阅。
所以 Voilà 是一次买断:先免费试用 30 天,不用绑卡;早鸟价 9.99 欧元,之后的更新都包含。试用结束后,用 Mac 本机的 Apple 语音识别仍然免费,不需要任何 API Key,也可以离线用(macOS 14–15 要在设置里打开“仅离线识别”)。只说一种语言的话,这个就够用了。
授权文件在本机用签名校验,没网也能激活;除了启动时校验授权和常规的更新检查,app 不收集任何使用数据。
古法编程 + AI
Voilà 从一开始就是给 AI 编程提效的小工具,我自己也是用它在指挥 AI 写代码。开发方式我叫它“古法编程 + AI”:代码自己写,AI 负责审查和实测,也帮我做不擅长的事。我没什么设计天赋,1.6 的界面改版和整体代码审查,靠的是 Claude Code。
它也反过来帮我写别的小项目。这段时间用 Voilà 口述给 AI,顺手又做了几个小东西:奇门遁甲排盘、临时信箱、各种盯盘工具。这正是 Voilà 最初的定位:vibe coding 的小助手,让造轮子快一点。
早期用户
1.0 发布之后,陆续来了一批真正的早鸟用户。不少人发邮件过来,有提 bug 的,有提需求的,也有单纯来说用得顺手的。邮件我基本 12 小时内回,能改的马上改,这是一个人做产品能给用户的最实在的东西。
最后
如果你也是一天到晚在 Mac 上打字,尤其是经常中英文混着说、或者在终端里跟 AI 打交道的人,可以试试 Voilà Pro。有问题直接发邮件给我,还是 12 小时内回。