返回

文章详情

使用Cloudflare AI的开源免费版Whispr

Hacker News2026年7月16日 02:57

语音转文本工具,可以捕获语音,通过Whisper进行转录,并使用LLM格式化输出。按下热键,讲话,释放——格式化的文本将进入您的剪贴板,并自动粘贴到您正在输入的内容中。 工作原理 ┌──────────────────────┐ PCM数据块 ┌──────────────────────────────────┐ 格式化 │ Wails桌面应用程序 │ ──WebSocket──▶ │ Cloudflare Worker(持久对象) │ ──文本────▶ 剪贴板 → 自动粘贴 (Go + React WebView)│ ◀─────────────│ Whisper STT → LLM格式化器 │ └──────────────────────┘ └──────────────────────────────────┘ 按住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客户端,流音频 + 焦点上下文到worker │ ├── 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事件 │ └── use-config.ts # GetConfig / SaveConfig / GetConfigPath绑定 ├── worker/ # Cloudflare Worker(TypeScript) │ ├── src/ │ │ ├── index.ts # 路由:/ws(WebSocket),/health │ │ ├── session.ts # 持久对象:音频积累 + AI管道 │ │ ├── prompt.ts # 系统提示 + 用户消息构建器 │ │ ├── wav.ts # PCM到WAV包装器 │ │ └── types.ts # 共享类型 │ ├── test/ # Vitest测试 │ └── wrangler.jsonc # 工作者配置 ├── go.mod └── voicebox.toml # 用户配置(git忽略) 设置 前提条件 Go 1.24+ Node.js + pnpm Wails v2 CLI 具有Workers AI访问权限的Cloudflare帐户 macOS(需要可访问性权限以进行自动粘贴) 部署工作者 cd worker pnpm install wrangler secret put VOICEBOX_TOKEN # 设置共享机密 pnpm deploy 配置桌面客户端 在首次启动时,VoiceBox会打开设置窗口。您还可以手动创建配置文件,在~/.config/voicebox/voicebox.toml : [ provider ] mode = " cloud " [ cloud ] worker_url = " https://voicebox.<your-subdomain>.workers.dev " token = " your-shared-secret " [ audio ] sample_rate = 16000 channels = 1 chunk_size = 4096 [ hotkey ] record = " ctrl+cmd " 配置按以下顺序加载:~/.config/voicebox/voicebox.toml ,靠近二进制文件,然后是./voicebox.toml 。 macOS可访问性权限 自动粘贴需要macOS可访问性访问。在首次使用时,macOS将提示您权限,或者您可以在系统设置 → 隐私与安全 → 可访问性中手动授予。 构建和运行 wails dev # 开发模式,支持热重载 wails build # 生产二进制文件 窗口模式 设置(700×450,居中):在启动时、停靠点击或通过录音菜单打开。在此处编辑配置。 叠加层(160×48,顶部中心,浮动):在录音期间出现。显示录音指示器和语音电平表,处理时显示旋转器,成功时显示对勾。 WebSocket协议 客户端连接到GET /ws?token=<auth-token> 。在接收到{"type":"ready"}后,客户端发送配置消息,带有音频和焦点上下文,然后流式传输二进制PCM块: 客户端 服务器 │── connect /ws?token=... ──────▶│ │◀── {"type":"ready"} ──────────│ │── {"type":"configure", ...} ──▶│ │── [binary PCM chunk] ─────────▶│ │── [binary PCM chunk] ─────────▶│ │── {"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-whisper 格式化器 : Ollama 提供者接口存在于internal/stt/和internal/formatter/ 音频规格 16kHz采样率,单声道,PCM有符号16位LE ~4096字节数据块(~128ms每块) 最大录音:~25 MiB(~13分钟) 开发 # 桌面应用程序 wails dev # 开发服务器(Go + Vite热重载) wails build # 生产构建 go vet ./... # Go lint go test ./internal/... # 测试Go # 前端 cd frontend && pnpm install && pnpm build

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡