为了控制 DIY 迪斯科灯光,我正在考虑在计算能力有限的微控制器(即 Arduino Uno)中实现节拍检测。虽然检测所有节拍将是一个加分项(其中之一,它可以测量 BPM,可用于根据音乐风格调整灯光),但此应用程序并非绝对需要,因为灯光设置通常必须以很大的速度更改频率低于节拍。所以我真正关注的是检测音乐中的“显眼”事件(节拍、空白后恢复等)以同步光线变化,但没有 100% 的可靠性。
约束如下:
- 可用的计算能力有限。Uno 基于ATmega328 8 位 16MHz MCU。如果这太受限制,我可以考虑使用基于AT91SAM3X8E 32 位 84MHz Cortex-M3 MCU 的 Due。
- 嘈杂的声音输入。理想情况下,声音会用一个小巧便宜的麦克风来捕捉。我还不确定 Uno 可以达到什么采样率。无论如何,我希望信号相当嘈杂。如果这被证明是必需的,我可能会考虑实施适当的声音输入(例如,使用坚固的音频屏蔽),但如果可能的话,我宁愿避免这种情况,因为连接音乐播放设备(可能有几个)的限制灯光控制电子设备。
- 理想情况下,该算法将有一个参数来调整对节拍事件检测的灵敏度。这样,灵敏度可以自动增加,以确保即使在恶劣的条件下(低音量、对话噪音等)也能检测到事件。
我的问题是:
- 什么(类)算法适合这个应用程序?
- 是否有任何可用的实现可以很容易地集成到 Arduino 项目中?