我們以前的固件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數據引腳的原因。