V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
handsomejustin80

🔊 SoundKeeper — 用一段听不到的声音,让蓝牙音箱永远保持连接

  •  
  •   handsomejustin80 ·
    handsomejustin · 1 day ago · 950 views
    家里有个蓝牙音箱,平时用来听歌、看视频。但有个很烦的问题:只要一段时间没有音频输出,音箱就会自动断开连接。下次想用的时候,又得手动去打开音箱、重新配对,非常打断节奏。

    一开始我试过用播放器循环播放一段静音音频,但实际体验不好——要么占用一个播放器,要么某些播放器检测到"静音"就暂停了。

    后来想到一个思路:既然音箱是因为"没有音频活动"才断连,那我只需要持续发送人耳听不到的声音就行了。人耳可听频率范围是 20 Hz - 20,000 Hz ,如果我只播放 5-10 Hz 的超低频正弦波,音箱会认为有音频在播放,但我完全听不到任何声音。

    基于这个原理,用 Go 写了一个小工具:

    工作原理:
    - 通过 Windows 的 winmm.dll ( waveOut API )直接向音频设备输出 5-10 Hz 的正弦波
    - 频率每 8 秒在 5Hz 和 10Hz 之间随机切换,振幅也在微量波动,模拟更自然的音频活动
    - 振幅控制在 0.3%-0.7%,配合超低频,完全不可感知

    实现方式:
    - 纯 Go 实现,通过 syscall 调用 winmm.dll 的 waveOut 系列函数,无需 CGO
    - 使用 systray 库实现系统托盘图标,后台运行不干扰
    - 开机双击运行后静默驻留在托盘,右键可查看运行状态(频率、振幅、已运行时长)
    - 编译时加了 -H windowsgui 标志,运行时不会弹出控制台窗口
    - 单文件可执行,无任何依赖,即开即用

    项目地址: https://github.com/handsomejustin/ble_soundkeeper

    有同样困扰的朋友可以直接去 Releases 下载 exe ,双击运行就行。代码也完全开放,随便用,随便改。
    14 replies    2026-05-06 10:55:27 +08:00
    afkool
        1
    afkool  
       1 day ago
    前段时间也很烦这个。但后来一查音响功率。。还是省点电重要。哈哈哈
    explorerproxy
        2
    explorerproxy  
       1 day ago
    我的 mac 连蓝牙经常会爆音,搞了个白噪声软件放后台静音播放着~~~
    PrinceofInj
        3
    PrinceofInj  
       1 day ago
    5~10Hz,这就是次声波吧?不知真假,但是早年间看到一些跟次声波很不好的科普文章,容我再去查查去……
    XuHuan1025
        4
    XuHuan1025  
       1 day ago
    几年前用 ahk 写过用到现在
    edong07
        5
    edong07  
       1 day ago via Android
    次声波对人体的影响要考虑一下
    billlee
        6
    billlee  
       1 day ago
    既然播静音音频就能保活,那你自己调 waveOut 也输出 0 波形就好了吧

    @PrinceofInj 我觉得这个没必要担心,实际上次声波根本播不出去吧,在放大器里就被滤掉了
    hxdyxd
        7
    hxdyxd  
       21h 7m ago via Android
    不会断吧,我用 mac 连蓝牙音箱从来没断过
    不主动在电脑里点断开,其他设备甚至都连不上
    styleyin
        8
    styleyin  
       19h 10m ago
    哈哈哈哈 我之前写过一个类似的,我的超老款的小米蓝牙音箱会自动关机
    hertzry
        9
    hertzry  
       19h 6m ago via iPhone
    如果你里面有独立低频单元,得考虑一下功耗和振膜损耗吧。
    0xC000009F
        10
    0xC000009F  
       18h 59m ago
    @edong07 蓝牙音箱功率太小了,发出来之前就被消耗过滤掉了。要对人体造成伤害起码得是个庞大的工业级设备。
    ko20
        11
    ko20  
       18h 0m ago
    我去,我和你有过同款烦恼,不过我在 linux 下,我直接用 systemd 写了脚本就解决了。我的蓝牙音箱 15 分钟无声音输出会自动关机,我就用 systemd 的 timer+service 每 14 分钟播放一段音频(可以静音播放,或者极低音量播放),就解决了
    WuDiHaiTai
        12
    WuDiHaiTai  
       17h 30m ago
    @hxdyxd 以前我有个 JBL 的小方砖,如果没有音频播放大约 20 分钟就会自动关机,感觉带电池的蓝牙音箱都这样,即使你插着电用,还是有这种省电策略。
    mofash
        13
    mofash  
       17h 19m ago
    这个项目早就有了我一直用的 SoundKeeper64.exe 才 37k ,你这个都 6M 多了 。。
    jukanntenn
        14
    jukanntenn  
       17h 3m ago
    我家的音箱是电脑开着不会断,电脑休眠后就会断,不知道这个有没有办法保活。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   941 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 19:58 · PVG 03:58 · LAX 12:58 · JFK 15:58
    ♥ Do have faith in what you're doing.