V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
nocmt
V2EX  ›  分享创造

[分享] ToMic - 把你的手机变成电脑的高质量麦克风 (Win/Mac, 0 App 安装, 低延迟)

  •  
  •   nocmt · 1 月 28 日 · 1364 次点击

    👋 背景与痛点

    最近语音输入软件出了好几款,可惜我的电脑没有麦克风,被逼无奈,Vibe Coding 一个用手机浏览器采集音频,通过局域网传给电脑作为麦克风的网页程序。


    🎙️ ToMic 是什么?

    ToMic 是一个基于 Web 技术的局域网虚拟麦克风工具。 它允许你使用手机浏览器作为电脑的麦克风输入源,通过 Wi-Fi 传输音频,并利用虚拟声卡( BlackHole 或 VB-CABLE )将其注入到系统音频输入中。

    核心特性:

    • 0 App 安装:手机端无需下载任何 APP ,扫码/输入 IP 即开即用( Chrome/Safari )。
    • 跨平台支持:完美支持 macOSWindows
    • 低延迟传输:基于 WebSocket + Opus 编码,配合 FFmpeg/SoX 管道处理,延迟极低。
    • 原生级体验
      • macOS: 内置 Swift 监听器,自动管理状态。
      • Windows: 通过注册表监听麦克风占用状态,当你打开 Zoom/Teams 时,手机端自动开始传输,挂断即停(无需手动开关)。
    • HTTPS 安全:局域网自动生成自签名 SSL 证书,解决浏览器录音权限问题。

    🛠️ 技术原理 (The Geeky Part)

    ToMic 的工作流非常直接,就像一条 Unix 管道:

    1. 采集 (Phone): 手机浏览器调用 MediaRecorder API ,采集 audio/webm;codecs=opus 音频流(支持回声消除/降噪)。
    2. 传输 (Network): 通过 Socket.io 将 Blob 数据块实时发送到电脑端的 Node.js 服务。
    3. 处理 (PC): Node.js 收到数据后,通过 Stream Pipe 喂给 FFmpeg 解码,再管道传输给 SoX
    4. 注入 (Driver): SoX 将 PCM 音频流实时写入到虚拟声卡设备( macOS 下是 BlackHole ,Win 下是 VB-CABLE )。
    5. 应用 (App): Zoom / Discord / Teams 等软件选择虚拟声卡作为输入源,听到声音。

    特别是在 Windows 上,为了实现“无感体验”,我写了一个 Python 脚本轮询注册表 CapabilityAccessManager\ConsentStore\microphone,以此来判断是否有应用正在使用麦克风,从而反向控制手机端的推流状态。

    🚀 快速开始

    下载程序:https://github.com/nocmt/toMic/releases

    2. 准备虚拟声卡

    • macOS: 压缩包内置了 BlackHole 安装包,运行即提示安装。
    • Windows: 压缩包内置了 VB-CABLE 安装包,运行即提示安装。

    3. 启动

    ./toMic
    

    启动后终端会显示一个 HTTPS 地址(如 https://192.168.1.5:23336)。

    4. 连接

    手机连接同一 Wi-Fi ,浏览器访问该地址( https 哈),点击“授权”即可。 (由于是自签名证书,浏览器会提示不安全,点击“高级 -> 继续访问”即可)


    🔗 项目地址

    GitHub: https://github.com/nocmt/tomic

    目前只是初期版本,欢迎大家试用、Star 或提 PR !如果有任何问题,也可以在这里反馈。

    18 条回复    2026-02-02 10:03:33 +08:00
    xing7673
        1
    xing7673  
       1 月 28 日
    有意思
    Exp
        2
    Exp  
       1 月 28 日
    大佬一言不合自己造神器,我等渣渣只能想到破财买个 DJI mic mini
    aresyang
        3
    aresyang  
       1 月 29 日
    传语音不如传文字过去, 比如我的工具 MateBot https://github.com/aresbit/MateBot
    paopjian
        4
    paopjian  
       1 月 29 日
    比较好奇这种功能消耗了多少 token, 相当于多少刀? 从零开始一个项目得花不少 token 吧
    nocmt
        5
    nocmt  
    OP
       1 月 29 日
    @aresyang 最近好多 AI 语音输入法,所以才有这个想法,另外主要是这些输入法可以解析音频修改后输出。
    nocmt
        6
    nocmt  
    OP
       1 月 29 日
    @paopjian 也不多,主要是指令要明确(起码看得懂代码),然后就搞定了。
    konchu
        7
    konchu  
       1 月 29 日
    试了一下,win10 运行不起来
    https://imgur.com/a/9nOCP0b
    micookie
        9
    micookie  
       1 月 29 日


    启动报错
    nocmt
        11
    nocmt  
    OP
       1 月 30 日
    nocmt
        12
    nocmt  
    OP
       1 月 30 日
    doublebu
        13
    doublebu  
       1 月 30 日 via Android
    如果传文字的话,可以尝试一下 kde connect 里面有个输入,配合豆包输入法或其他语音输入法就可以了。

    只是经常要拿起手机比较麻烦
    konchu
        14
    konchu  
       1 月 30 日
    @konchu #7 更新好快!新版本可以了。VBCABLE_Driver_Pack45.zip 我这边是要手动解压缩,然后运行 VBCABLE_Setup.exe 安装之后驱动,就能用了。
    korvin
        15
    korvin  
       1 月 31 日
    用不起来,ffmpeg sox 都装了,程序启动显示一切正常,但就是没效果

    Screenshot_2026-01-31-20-27-07-31_40deb401b9ffe8e1df2f1cc5ba480b12.jpg
    系统设置里输入输出都是 BlackHole 2ch ,使用软件时音频输入也改成了 BlackHole 2ch
    nocmt
        16
    nocmt  
    OP
       22 小时 43 分钟前
    @korvin 输出不用选 BlackHole 2ch (输入选这个)
    ,另外查看系统设备的 麦克风音量显示那边有没有变化

    手机这边有没有允许麦克风输入?要给浏览器权限和这个页面麦克风权限。看你手机截图貌似没有开启麦克风
    korvin
        17
    korvin  
       22 小时 39 分钟前
    @nocmt #16
    那你软件里使用说明写错了,我还反复确认了后几次,最后就输入输出全选了。
    手机浏览器麦克风权限给了
    系统设备的 麦克风音量没有变化
    nocmt
        18
    nocmt  
    OP
       7 小时 13 分钟前
    @korvin #17 你要有时间的话,可以给你开腾讯会议远程调试一下。联系我 bm9jbXRvbmVAZ21haWwuY29t
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   4655 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:16 · PVG 17:16 · LAX 01:16 · JFK 04:16
    ♥ Do have faith in what you're doing.