🎙 Voilà 接管你的嘴 way to explore https:https://cdn.v2ex.com/navatar/8296/5d4e/1346_normal.png?m=1778310645 https:https://cdn.v2ex.com/navatar/8296/5d4e/1346_large.png?m=1778310645 2026-05-07T18:57:46Z Copyright © 2010-2018, V2EX Voilà 的小故事 (2) tag:www.v2ex.com,2026-05-07:/t/1211023 2026-05-07T18:57:46Z 2026-05-07T18:57:46Z qfdk member/qfdk 上一篇结尾我说,按住一个键,说话,松开,文字出现。Voilà 。

听起来挺简单。真做下去才发现,要让一个东西看起来简单,挺贵的。

第一版做出来,从按下快捷键到真正开始录音,中间大概要等 1 秒。第一次用的人察觉不到,我自己用一天就受不了——那点延迟正好踩在"按下"和"开始说话"之间,整个动作变成在跟系统打商量。

CGEvent 冷启动、AVAudioEngine 建链路、WebSocket 握手……每一项单独都说得通,加在一起就把"按下就说话"打穿了。办法不优雅,就是把它们提前做掉,挂在那等用户来按。

听起来理所当然。但"理所当然"这四个字其实挺贵的——背后全是日夜在研究"古法编程"的最佳实践。

状态

打开设置你会发现 UI 简陋得像个毛胚房,因为时间都花在了悬浮窗上。一共做了三种风格,背景也开放给用户自己调。毕竟每天都要盯着看,得先让自己看着舒服。

真正的测试

每天用它最猛的是我自己。打字、终端、甚至开会。

我们公司开会全程法语,快得要死。一句没跟上,整段就过去了。有一天突发奇想,把 Voilà 开着让它替我听——它听得比我清楚。我那位神奇的领导能一口气狂喷半小时,Voilà 稳稳接住。

于是给它加了一个字幕模式。下次远程开会,按下,让它替你听。

也得说一句,Voilà 在识别这一块站的是 Soniox 的肩膀。

Voilà, à plus.

]]>
Voilà 的小故事 (1) tag:www.v2ex.com,2026-05-05:/t/1210380 2026-05-05T21:34:06Z 2026-05-05T23:09:16Z qfdk member/qfdk 故事得从 2024 年 10 月讲起。

那时候我和一个 C 开头的朋友,在做一个量(爆)化(仓)机器人。

网格、加仓、对冲、永续,参数调得花里胡哨,回测曲线漂亮得能裱起来。两个礼拜上线,名字起得很有气势,现在想起来有点不好意思。

当时我们甚至一度冲到了交易所前排。

然后,11 月的某个周四凌晨,SOL 来了一根针。

系统非常忠实地执行了我们写好的逻辑:在错误的方向上继续加仓,并且以惊人的纪律性,把账户余额清零了。

复盘之后才发现,问题不是什么玄学,也不是市场突然变坏,而是代码里一个不起眼的小瑕疵。那个瑕疵在回测曲线上看不出来,在上线之前也没人觉得它会真的发生。直到它发生。

那段时间学到的最贵一课就是:AI 一时爽,爆仓火葬场。

爆仓之后怎么办?

按理说应该哭天喊地,或者找个人背锅。但后来想想,没什么意思。C 同学也不是外包背锅侠,他和我一样,都是这个项目的一部分。真正的问题不在某个人,而在于我们把太多信任交给了一个自己还没有完全掌控的系统。

也是从那之后,我开始重新思考自己和 AI 工具的关系。

过去这一两年,所谓“氛围编程”变了好几轮。最早大家讲 Prompt Engineering ,后来开始讲 Context Engineering ,现在又开始讲 Harness Engineering 。每隔一段时间就有新工具、新概念、新工作流。

但不管工具怎么变,有一件事一直没变:我需要反复和 AI 说清楚我要什么。

尤其是用 Claude Code 这类工具的时候,很多时候不是代码写不出来,而是我要在终端里打一大段上下文、一大段要求、一大段解释。白纸黑字,纯靠键盘,时间久了就很烦。

我开始想,有没有可能把这件事变得自然一点?

不是再做一个复杂的 AI Agent 来学习你的行为,也不是让 AI 替我思考,而是先解决一个最朴素的问题:

我能不能直接把想法说出来?

V2EX 社区碰到了老蔡的 LazyTyper,它证明了这件事确实有价值:对着电脑说话,然后把文字送进输入框,这个体验本身很自然。

但用下来之后,我还是遇到了一些问题。比如输入突然中断,状态突然没响应,按下快捷键之后还要等一会儿才真正开始录音。对一个高频工具来说,这些小卡顿会被放大很多倍。

语音输入最重要的不是“能不能识别”,而是“跟不跟手”。

我想要的体验很简单:按下一个键,立刻开始说话。

哪怕网络还在连接,哪怕界面还显示正在准备,也应该先把声音录下来。
松开之后,文字很快出现在光标所在的地方。

所以最后我决定自己做一个。

因为主要使用场景就是 macOS ,我没有选择跨平台方案,也没有用 Electron 。不是因为 Electron 不好,而是我想要一个真正贴近 macOS 的原生工具。它应该轻、快、稳定,像系统能力的一部分.

这就是 Voilà 最早的起点。

在语音识别引擎上,我选择了 Soniox, 原因也很简单:它对我自己的使用场景足够友好。

我常常会在中文、英文、法语之间切换,有时候一句话里还会夹杂一些产品名、变量名、命令、专有名词。Soniox 在这种混合语言场景里的实时识别表现很好。ElevenLabs 也不错,但 Soniox 的整体体验更贴近我想要的那种“边说边出来”的节奏。

后来 Voilà 慢慢变成了一个我每天都在用的小工具。

它没有太多花哨的东西。不是一个帮你自动写作的 AI ,也不是一个全能助手。它更像是一支顺手的笔。

  • 你负责思考,负责表达,负责判断。
  • 它只负责把你说的话,尽快、尽量准确地放到屏幕上。

这也是我在那次爆仓之后慢慢形成的一个判断:AI 可以很强,但人必须还是主体。

尤其是在写代码、做产品、和工具协作的时候,AI 不应该替你接管方向。它应该降低摩擦,让你的想法更快落地。

Voilà 做的就是这件小事。 按住一个键,说话。 松开。 文字出现。Voilà.

这个名字其实也改过很多次。

一开始它叫 FlowType ,一听就是程序员起的名字,准确,但没有那种“瞬间出现”的感觉,法语里 Voilà 是一个很有画面感的词。

魔术师变完戏会说 Voilà,服务员把菜端上桌也会说 Voilà, 简短的字告诉你完活。

你把一个东西完成、呈现、交到别人面前,也可以说 Voilà。

这正好就是我想要的产品体验:想法说出口,文字出现在屏幕上

Voilà et bonne nuit

]]>
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86