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

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

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

后来想到一个思路:既然音箱是因为"没有音频活动"才断连,那我只需要持续发送人耳听不到的声音就行了。人耳可听频率范围是 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 ,双击运行就行。代码也完全开放,随便用,随便改。
953 次点击
所在节点    分享创造
14 条回复
afkool
1 天前
前段时间也很烦这个。但后来一查音响功率。。还是省点电重要。哈哈哈
explorerproxy
1 天前
我的 mac 连蓝牙经常会爆音,搞了个白噪声软件放后台静音播放着~~~
PrinceofInj
1 天前
5~10Hz,这就是次声波吧?不知真假,但是早年间看到一些跟次声波很不好的科普文章,容我再去查查去……
XuHuan1025
1 天前
几年前用 ahk 写过用到现在
edong07
1 天前
次声波对人体的影响要考虑一下
billlee
1 天前
既然播静音音频就能保活,那你自己调 waveOut 也输出 0 波形就好了吧

@PrinceofInj 我觉得这个没必要担心,实际上次声波根本播不出去吧,在放大器里就被滤掉了
hxdyxd
22 小时 5 分钟前
不会断吧,我用 mac 连蓝牙音箱从来没断过
不主动在电脑里点断开,其他设备甚至都连不上
styleyin
20 小时 7 分钟前
哈哈哈哈 我之前写过一个类似的,我的超老款的小米蓝牙音箱会自动关机
hertzry
20 小时 4 分钟前
如果你里面有独立低频单元,得考虑一下功耗和振膜损耗吧。
0xC000009F
19 小时 56 分钟前
@edong07 蓝牙音箱功率太小了,发出来之前就被消耗过滤掉了。要对人体造成伤害起码得是个庞大的工业级设备。
ko20
18 小时 57 分钟前
我去,我和你有过同款烦恼,不过我在 linux 下,我直接用 systemd 写了脚本就解决了。我的蓝牙音箱 15 分钟无声音输出会自动关机,我就用 systemd 的 timer+service 每 14 分钟播放一段音频(可以静音播放,或者极低音量播放),就解决了
WuDiHaiTai
18 小时 28 分钟前
@hxdyxd 以前我有个 JBL 的小方砖,如果没有音频播放大约 20 分钟就会自动关机,感觉带电池的蓝牙音箱都这样,即使你插着电用,还是有这种省电策略。
mofash
18 小时 17 分钟前
这个项目早就有了我一直用的 SoundKeeper64.exe 才 37k ,你这个都 6M 多了 。。
jukanntenn
18 小时 1 分钟前
我家的音箱是电脑开着不会断,电脑休眠后就会断,不知道这个有没有办法保活。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1210364

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX