注意各地的音樂家!通過創建自己的自定義樂器數字接口 (MIDI) 控制器,您可以讓音樂的每一個音符都真正屬于您,從而使音樂更具原創性。你怎么做這樣的事情,你問?使用稱為 Arduino 的開源電子原型平臺。?
圖片來源:MakeUseOf。
使用 Arduino Uno,這個項目既簡單又快速。如果您不熟悉 Arduino,您應該查看有關如何使用該板的教程。如果您有經驗,請準備好應對這種設計。但在開始之前,請確保您知道 MIDI 信息有兩種主要類型:控制變更 (CC) 和程序變更 (PC)。
CC 消息包含控制器編號和 0 到 127 之間的值。這些消息通常用于更改音量或音高等設置。接受 MIDI 的設備應附帶說明默認設置哪些通道和消息以及如何更改它們的手冊。
PC 消息比 CC 消息簡單。PC 消息由單個數字組成,用于更改設備上的預設或音色。與 CC 消息一樣,制造商應提供一份文檔,概述特定消息更改了哪些預設。
以下是構建自己的 MIDI 控制器所需的內容:
一旦你收集了你的設備,就該開始了。因為只需要三個引腳,幾乎任何 Arduino 都適用。這個項目包括兩個控制程序的按鈕、一個發送數據的 MIDI 端口和一個接收消息的設備。在最初的設計中,電路是建立在面包板上的,但可以將其轉移到項目盒和焊接連接器中,以獲得強大的解決方案。
圖片來源:MakeUseOf。
圖片來源:MakeUseOf。
采取以下步驟連接您的 MIDI 插座:
- MIDI pin 5 通過 220 ohm 電阻連接到 Arduino Transmit (TX) 1
- 通過 220 歐姆電阻將 MIDI 引腳 4 連接到 Arduino +5V
- MIDI pin 2 到 Arduino 地
至于按鈕連接,按鈕通過改變 Arduino 看到的電阻來工作。Arduino 引腳通過 10k 歐姆電阻通過開關直接接地 (LOW)。當按下按鈕時,電路看到的值變為+5v,沒有電阻(HIGH)。Arduino 可以使用 digitalRead(pin) 命令檢測到這種變化。將按鈕連接到 Arduino 數字輸入/輸出 (I/O) 上的引腳 6 和 7。連接兩個按鈕:
- 按鈕左側為+5V
- 按鈕右側通過 10k 歐姆電阻連接到 Arduino Ground
- 按鈕右側到 Arduino 引腳(6 或 7)
硬件完成后,就該進行測試了。您需要一個 USB-MIDI 接口和一根 MIDI 電纜。連接在面包板上的 MIDI 端口將發送數據,因此它用作輸出。因為您的計算機接收數據,所以它是輸入。該項目使用??47 Effects的 Arduino MIDI 庫 v4.2 。安裝庫后,您可以通過轉到 Sketch > Include Library > MIDI 將其包含在代碼中。
您還需要一個程序來監控傳入的 MIDI 數據:
接下來,將 Arduino 連接到您的計算機并上傳以下測試代碼:
#包括
#包括
#包括
#包括
#包括?
MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // 創建一個名為 midiOut 的 MIDI 對象?
無效設置(){Serial.begin(31250);// 為 MIDI 設置串口}?
無效循環()?
? midiOut.sendControlChange(56,127,1); // 發送一個 MIDI CC — 56 = 音符,127 = 力度,1 = 通道
? 延遲(1000);// 等待 1 秒
? midiOut.sendProgramChange(12,1); // 發送 MIDI PC — 12 = 值,1 = 通道
? 延遲(1000);// 等待 1 秒}
此代碼將發送 CC 消息。如果一切正常,您應該會在 MIDI 監視器中看到一條消息。如果沒有任何反應,請嘗試故障排除:
- 確保所有連接正確
- 檢查 MIDI 端口的接線是否正確——外側邊緣應該有 2 個備用引腳
- 仔細檢查電路是否正確
- 驗證電路是否使用 MIDI 電纜連接到 USB-MIDI 接口
- 檢查您的 MIDI 電纜是否連接到 USB-MIDI 接口上的輸入
- 確保 Arduino 有電
- 為您的 USB-MIDI 接口安裝正確的驅動程序
為確保按鈕正常工作,請上傳以下測試代碼。請注意,無需連接 MIDI 即可測試此部分。
常量 int buttonOne
= 6; // 將按鈕引腳分配給變量
常量 int buttonTwo
= 7; // 將按鈕引腳分配給變量?
無效設置(){ .begin Serial
(9600);// 為文本設置序列號
? 銷模式(buttonOne
,INPUT
);// 設置按鈕作為輸入
? 銷模式(buttonTwo
,INPUT
);// 設置按鈕作為輸入}?
void loop() {if(digitalRead(buttonOne
) ==HIGH
) { // 檢查按鈕狀態
??? 延遲(10);// 軟件去抖動
??? if(digitalRead(buttonOne
) ==HIGH
) { // 再次檢查按鈕狀態
????? Serial
.println("按鈕一有效!"); // 記錄結果
????? 延遲(250);}??
??if(digitalRead(buttonTwo
) ==HIGH
) { // 檢查按鈕狀態
??? 延遲(10);// 軟件去抖動
??? if(digitalRead(buttonTwo
) ==HIGH
) { // 再次檢查按鈕狀態
????? Serial
.println("按鈕兩個有效!"); // 記錄結果
????? 延遲(250);}?
在保持 USB 電纜連接的同時運行此代碼,然后打開串行監視器(右上角 > 串行監視器)。當您按下一個按鈕時,您應該會看到“Button One Works!” 或“按鈕二有效!” 取決于您按下的按鈕。
當一切都連接好并正常工作時,您將組裝完整的控制器。下面的示例將為每個按下的按鈕發送不同的 CC 消息,并且類似于上面的測試示例。
#包括
#包括
#包括
#包括
#包括?
常量 int buttonOne
= 6; // 將按鈕引腳分配給變量
常量 int buttonTwo
= 7; // 將按鈕引腳分配給變量?
MIDI_CREATE_INSTANCE(HardwareSerial
,,,Serial
)midiOut
; // 創建一個名為 midiOut 的 MIDI 對象
無效設置(){pinMode(buttonOne
,INPUT
);// 設置按鈕作為輸入
? 銷模式(buttonTwo
,INPUT
);// 設置按鈕作為輸入
? Serial
.開始(31250);// 設置 MIDI 輸出}
void loop() {if(digitalRead( buttonOne
) == HIGH
) { // 檢查按鈕狀態
??? 延遲(10);// 軟件去抖動
??? if(digitalRead(buttonOne
) ==HIGH
) { // 再次檢查按鈕狀態
????? midiOut
.sendControlChange(56,127,1); // 發送一個 MIDI CC -- 56 = note, 127 = velocity, 1 = channel
????? 延遲(250);}
??if(digitalRead(buttonTwo
) ==HIGH
) { // 檢查按鈕狀態
??? 延遲(10);// 軟件去抖動
??? if(digitalRead(buttonTwo
) ==HIGH
) { // 再次檢查按鈕狀態
????? midiOut
.sendControlChange(42,127,1); // 發送一個 MIDI CC -- 42 = note, 127 = velocity, 1 = channel
????? 延遲(250);}
你有它。MIDI 控制器有很多用途——從工作室控制器到腳控單元。您是否曾經創建過自己的自定義 MIDI 控制器?如果是這樣,請在下面發表評論。
審核編輯:湯梓紅
評論
查看更多