我们以前的固件Remora打算从ORCλ接收简短命令,并在可寻址LED条纹上制作非常简单的Neopixels动画(WS2812B喜欢)
计划nodejs中间件
第一个不需要任何MIDI HAT将信号转换为MIDI的实现使用Nodejs中间件。要启动它,只需转到目录:
cd middleware/midi-to-udp
nodejs midi.js
在那里,您会看到您将拥有哪些端口作为即将到来的MIDI。您需要MIDI输入源是一种仪器或您从计算机本身发送的东西。就我而言,我将胆怯和玫瑰g的结合(用于Linux的蛋糕漫步)结合在一起。看到列出的端口后,只需在其中添加-p(port)和-U(UDP)IP地址。 UDP端口在中间件和ESP32固件中均固定为49161。例如:
$ nodejs midi.js -p 3 -u 192.168.12.109
Listening to: rosegarden:out 1 - General MIDI Device 130:3 and forwarding to 192.168.12.109:49161
这将将MIDI音符重定向到UDP。 ESP32将收到此UDP简短消息,并将其绘制在LED矩阵中。
计划B Midi串行版本
需要一个Sparkfun Midi-Arduino模块才能使MIDI穿越并进行串行转换。使用Serial2将第一个调试的接线与ESP32的接线非常直接:
ESP32 | HAT MIDI 5V 5V GND GND RX 26 TX 27
如果您想独立wifi,这实际上应该是真实的东西,更快且潜在的速度更少。

为了统一固件的不同采用,并且将来是一个通用类,该类将聆听相同的命令,我们发明了一个非常简短的内部消息,该消息使用6个字符。我们使用十六进制始终保持2个字符长度:
2 chars (HEXA) representing Note played
1 boolean representing Status (1 note on, 0 note off)
2 chars (HEXA) representing Velocity
NNSVV注意,状态,速度
在UDP-MIDI-MATRIX版本中,中间件脚本应在后台运行,以便将MIDI信号转换为简短的UDP消息。
在Midi-In-in-in-in-in-in-in-in-in-in-in-in-midi中,MIDI使用Sparkfun Midi帽子转换为UART,并直接在ESP32中的HardwareSerial端口(Serial2)中收到。因此,此版本是wifi独立的,应该具有较小的延迟。但是,您需要在电缆中使用MIDI。
示例:在十进制,速度60中的八度音频3中播放36,消息说明是:
2413B
When the same note is released it could be:
24000
请注意,某些合成器也会发送释放速度,因此最后2个chars Hexa并非总是0。将来将实现频道过滤。让您使用PlatformIO.Ini常数在所有通道或2个通道之间进行选择:
-D MIDI_LISTEN_CHANNEL1=0
-D MIDI_LISTEN_CHANNEL2=0
在0上,它将允许全部。如果您对每个常数使用1和2,则只能聆听这些频道。频道过滤仅在串行版本中可用,因为我仍然没有发现nodejs midi库中的位置。可以随意探索中间件/中间软件上的读数
该语言应保持简单且也很短,以便可以通过UDP快速飞行。第一个计划迭代看起来像这样:
Chord HEXA | note on/off (1 char) | velocity HEXA
48140 C on 40
48030 C off
请确保仅编辑platform.ini和uncomment,只有一个src_dir文件夹之一选择要运行的示例。例如,如果您想将UDP运行到MIDI固件,则只需输入以下内容:
#Uncomment only one of the folders to select what example to run:
#src_dir = firmware/adafruit-matrix-test
src_dir = firmware/udp-midi-matrix
然后,编译只会选择此目录并将其刷新到您的ESP32。
要求在Platform.ini文件中。检查一下并将其调整为您的董事会和需求。这是非常快速的,感谢Amazing Marc Merlin的for for fastled_neomatrix的工作,这是将数据发送到您的可寻址LED数据引脚的原因。