[分享创造] 🔊 SoundKeeper — 用一段听不到的声音,让蓝牙音箱永远保持连接

家里有个蓝牙音箱,平时用来听歌、看视频。但有个很烦的问题:只要一段时间没有音频输出,音箱就会自动断开连接。下次想用的时候,又得手动去打开音箱、重新配对,非常打断节奏。 一开始我试过用播放器循环播放一段静音音频,但实际体验不好——要么占用一个播放器,要么某些播放器检测到"静音"就暂停了。 后来想到一个...
[分享创造] 🔊 SoundKeeper — 用一段听不到的声音,让蓝牙音箱永远保持连接
[分享创造] 🔊 SoundKeeper — 用一段听不到的声音,让蓝牙音箱永远保持连接


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

后来想到一个思路:既然音箱是因为"没有音频活动"才断连,那我只需要持续发送人耳听不到的声音就行了。人耳可听频率范围是 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 ,双击运行就行。代码也完全开放,随便用,随便改。
来源: v2ex.com查看原文