【发布时间】:2012-01-19 15:40:02
【问题描述】:
我家安装了一些 LED,我想让它们随着音乐起舞。
我的设置:
- 10 个 RGB LED 灯条(30 个通道)由 PWM(48 步)控制,通过 USB 连接到 PC。
- LED 灯条物理上分为 4 组
- Hardware 由 Node.js 控制。
- 音乐在另一台机器上通过 Traktor 播放。
- Traktor 提供带有主速度和电平的 MIDI 数据。
- 我已通过 UDP 将 MIDI 数据转发到节点服务器。
我已经编写了一个库来抽象控制 LED,所以在 Node 中,我可以调用:
channel[n].set(intensity, r, g, b);
...它负责优化通过 USB 总线发送的数据。
因此,在我的 Node 服务器上,我收到了音乐节奏和关卡数据,并希望将其转换为灯光秀。节点大约每 60 毫秒获取一次当前音频电平。数据如下所示(歌曲中间 20 秒的样本,点击放大):
http://josh3736.net/images/ledviz.gif
MIDI 数据以 0..127 的比例输出。在这种情况下,42 的速度值对应于 128 的 BPM。
这个问题有多个部分可以解决:
-
最重要的是,使用这些数据控制 LED 的最佳方法是什么?
- 理想情况下,输入数据应该影响颜色之间的动画/过渡;但是,在重击时,突然的变化/频闪也可能很好。
- 还有其他来自 Traktor 的 MIDI 数据我应该发送到 Node 吗?
- 如何让 4 个物理组中的每一个都偏向于相同的颜色?
感兴趣的链接:
【问题讨论】:
-
首先,MIDI 不是音频数据,并且与音频无关。 MIDI 只是一种用于控制合成器和各种其他设备的协议。如果您希望能够让它在 iTunes 中工作,那么完全忽略 MIDI,并仅针对音频重写您的问题。
-
@Brad:Traktor 使用 MIDI 从硬件接收控制命令并发送多种类型的数据,包括有关播放音频的数据——在这种情况下,我已经将其配置为发送速度(BPM)和电平(音量)。我将划定关于 iTunes 的界限,因为无论如何它可能超出了这个问题的范围。
-
@josh3735,好吧,既然我们完全忽略了音频,只关注 MIDI... 为什么不使用标准的 MIDI 同步消息?它们应该由 Traktor 以及其他软件(例如 Ableton Live)发送。每拍你会收到 96 条时钟消息。
标签: javascript node.js visualization midi led