App 与硬件的联动逻辑:和弦灯光、扫弦桨、音色是怎么实时同步的
通信架构:蓝牙实时双向同步
官方 FAQ 里提到一条很关键的说明:LiberLive C1 是通过 App 连接,不是通过手机系统蓝牙设置连接。这意味着 App 直接和 C1 建立了蓝牙低功耗(BLE)的双向通信通道,而不是走系统级的音频蓝牙协议。
这套通道上跑的消息大致分四类:
| 方向 | 内容 | 典型延迟 |
|---|---|---|
| App → C1 | 当前和弦、LED 亮度 / 颜色、当前风格包 / 音色、固件数据 | 几十毫秒,人耳感觉不到延迟 |
| C1 → App | 扫弦桨按压 / 触摸事件、和弦指板按键事件、电量状态、麦克风数据(U1) | 实时推送 |
| App → C1 | 曲谱里的节奏和速度信息 | 节拍同步,保证鼓机 + 扫弦在同一拍上 |
| C1 → App | 固件版本、硬件状态(电池温度、按键自检) | 按需拉取 |
和弦灯光是怎么推进的
这是整套系统里最核心的交互,拆分一下:
- 曲谱里的每个和弦色块有一个"节拍时间戳"(比如第 1 小节第 1 拍推 C,第 1 小节第 3 拍推 G)
- App 打开曲谱后,内部维护一个带 DWT(Downbeat / Beat Counter)的节拍时钟
- 节拍时钟推进到下一个和弦的节拍点前几十毫秒,App 先给 C1 发指令"下一个亮 C,亮度 80%"
- 同时 App 屏幕上的曲谱色块推进,当前该按的和弦高亮
- 你按下 C1 上对应 C 的和弦指板 → C1 回传按键事件给 App → App 同时:更新曲谱推进、触发音色发声、亮下一个和弦的 LED
整个链路从 App 决定"该亮 C"到你听到声音、看到下一个 LED,是几十毫秒级的,跟人手动作速度匹配。
扫弦桨触发发声的逻辑
A / B 两个扫弦桨的设计是:小桨 A 适合主歌 / 分解,大桨 B 适合副歌 / 扫弦,但这个分工可以在 App 里随时调换。
发声逻辑有两种模式:
- 跟随模式:扫弦桨被按下 → C1 立刻发消息给 App → App 触发当前和弦当前风格包对应的音色发声。这种模式下扫弦桨是"扳机"
- 自动鼓机模式:C1 的鼓机组件跟随 App 曲谱里的节拍自动推进扫弦节奏,扫弦桨变成"触发开关"——你按一下,鼓机和扫弦就持续响;再按一下停
风格包 / 音色 / 速度的实时切换
这三类设置在 App 里改完,是通过 BLE 通道实时推送到 C1 的:
- 风格包切换:切到 "R&B" → App 给 C1 发"改用 R&B 的鼓机模板 + 旋律音色" → C1 下一个扫弦桨就用新音色发声
- 速度调节:从 100 BPM 调到 120 BPM → App 节拍时钟变快 → 鼓机、LED 推进、曲谱色块全部同步加速
- 移调:C 调转 G 调 → 七个基础和弦 C/Dm/Em/F/G/Am/Bdim 整体平移 → LED 亮的和弦名跟着变
所有这些操作都不需要重启设备或重新加载曲谱。
为什么强调"App 直连"
官方 FAQ 里特意说了"C1 不通过手机蓝牙设置连耳机 / 音箱",背后的原因是:
- App 直连 C1 是 BLE 数据通道,稳定、低延迟
- 如果同时让系统蓝牙音频通道介入,会和 BLE 抢射频资源,可能导致灯光延迟、扫弦发声不同步
- 所以 C1 的扬声器是内置的,外接耳机或音箱走 C1 自己的音频输出,不经过手机蓝牙音频
这也解释了为什么你必须在 LiberLive App 里点设备连接图标,不能在手机系统设置里找 C1。