开发者生态
morning
使用 Cloudflare AI 的开源、免费套餐 Whispr
2026-07-16
1 阅读
约9分钟阅读
TreDub
字号:
VoiceBox 语音转文本工具,可捕获语音,通过 Whisper 进行转录,并使用法学硕士格式化输出。按热键,说话,松开 — 格式化文本会出现在剪贴板中,并自动粘贴到您输入的内容中。 工作原理 ┌──────────────────┐ PCM 块 ┌──────────────────────────────┐ 格式化 │ Wails 桌面应用程序 │ ──WebSocket──▶ │ Cloudflare Worker (Durable Obj) │ ──文本────▶ 剪贴板 → 自动粘贴 │ (Go + React WebView)│ ◀────────────│ Whisper STT → LLM Formatter │ └──────────────────────┘ └──────────────────────────────┘ 按住 Ctrl+Cmd — 捕获焦点上下文,开始录音,叠加层出现在顶部中心 对着麦克风讲话(语音电平表显示输入) 释放 Ctrl+Cmd — 音频流到云端 Whisper 转录,LLM 格式,结果复制到剪贴板并自动粘贴到原始应用程序 项目结构 voicebox/ ├── main.go # Wails 入口点、应用程序菜单 ├── app.go # 应用程序生命周期、热键处理程序、管道编排 ├── window_darwin.go # macOS 窗口管理(叠加、设置、停靠点单击) ├── window_other.go # 用于非 macOS 构建的存根 ├── internal/ │ ├── audio/ # PCM 音频捕获(malgo/miniaudio),RMS 级别 │ ├── pipeline/ # WebSocket 客户端,将音频 + 焦点上下文传输到工作人员 │ ├──accessibility/ # macOS AX API:焦点元素上下文 + 自动粘贴 (Cmd+V) │ ├── config/ # TOML配置加载和保存 │ ├── hotkey/ # 全局热键注册 │ ├── stt/ # STT 提供者接口(存根) │ └── formatter/ # LLM 格式化提供者接口(存根) ├── frontend/ # React + Tailwind 覆盖 UI (Vite) │ └── src/ │ ├── App.tsx # 设置模式和覆盖模式之间的路由 │ ├── Components/ │ │ ├── settings-form.tsx # 配置编辑器 (react-hook-form + zod) │ │ └── title-bar.tsx # 带拖动区域的无框标题栏 │ └── hooks/ │ ├── use-voicebox.ts # voicebox:state / voicebox:mode / voicebox:level events │ └── use-config.ts # GetConfig / SaveConfig / GetConfigPath 绑定 ├──worker/ # Cloudflare Worker (TypeScript) │ ├── src/ │ │ ├──index.ts # Router: /ws (WebSocket), /health │ │ ├── session.ts # 持久对象:音频积累 + AI 管道 │ │ ├── Prompt.ts # 系统提示 + 用户消息构建器 │ │ ├── wav.ts # PCM 到 WAV 包装器 │ │ └── types.ts # 共享类型 │ ├── test/ # Vitest 测试 │ └── wrangler.jsonc # Worker 配置 ├── go.mod └── voicebox.toml # 用户配置 (gitignored) 设置先决条件 Go 1.24+ Node.js + pnpm Wails v2 CLI具有 Workers AI 访问 macOS 的 Cloudflare 帐户(自动粘贴所需的访问权限) 部署 Worker cd worker pnpm install wrangler Secret put VOICEBOX_TOKEN # 设置共享密钥 pnpm deploy 配置桌面客户端 首次启动时,VoiceBox 会打开一个设置窗口。您还可以在 ~/.config/voicebox/voicebox.toml 手动创建配置: [provider]mode = "cloud"[cloud]worker_url ="https://voicebox..workers.dev"token ="your-shared-secret"[audio]sample_rate = 16000channels=1chunk_size=4096[hotkey]record="ctrl+cmd"配置为从(按顺序)加载: ~/.config/voicebox/voicebox.toml ,在二进制文件旁边,然后是 ./voicebox.toml 。 macOS 辅助功能权限 自动粘贴需要 macOS 辅助功能访问权限。首次使用时,macOS 会提示授予权限,或者您可以在 系统设置 → 隐私和安全 → 辅助功能 中手动授予权限。构建并运行 wails dev # 热重载的开发模式 wails build # production 二进制文件 窗口模式设置(700×450,居中):在启动时、单击停靠栏或通过“录制”菜单打开。在这里编辑配置。叠加(160×48、顶部中心、浮动):录制期间出现。显示带有语音电平表的录音指示器、处理时的旋转器、成功时的复选标记。 WebSocket 协议客户端连接到 GET /ws?token= 。收到 {"type":"ready"} 后,客户端发送一条带有音频和焦点上下文的配置消息,然后流式传输二进制 PCM 块: Client Server │── connect /ws?token=... ──────▶│ │◀── {"type":"ready"} ──────────│ │── {"type":"configure", ...} ──▶│ │── [二进制 PCM 块] ──────────▶│ │── [二进制 PCM 块] ──────────▶│ ──── {"type":"audio_end"} ────────▶│ │◀── {"type":"processing",...} ──│ │◀── {"type":"result",...} ──────│ 配置消息携带音频参数和焦点元素上下文(应用程序名称、包 ID、元素角色、标题、占位符、当前值),LLM 格式化程序使用这些参数来定制输出。云后端 STT:@cf/openai/whisper-large-v3-turbo 格式化程序:@cf/qwen/qwen3-30b-a3b-fp8 本地后端(第 2 阶段) STT:faster-whispe
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱