Raspberry Pi OSA MIDI 板

設置 Raspberry Pi 的 MIDI
本指南將展示如何使用新安裝的 Raspberry Pi 並將其作為操作系統可發現的 MIDI I/O 設備進行操作。 它還將提供一些前amp使用各種 Python 庫將 MIDI 數據傳入和傳出編程環境的文件。 更新 – 11 年 2021 月 XNUMX 日。:本指南已更新,以修復最新 Raspberry Pi OS 版本的一些問題,您還可以在此處下載包含預安裝腳本和完全配置的完整映像。
我們需要什麼
- 樹莓派 A+/B+/2/3B/3B+/4B
 - 適用於 Raspberry Pi 的 MIDI 板
 - MicroSD 卡•一套 4 個尼龍 M2.5 螺絲
 - 4 件套尼龍 M2.5*11mm 母對母螺柱
 - 4 件套尼龍 M2.5*5mm 公對母螺柱
 
集會
使用尼龍螺絲和螺柱將樹莓派與MIDI板組裝在一起,如下圖所示:

首次設定
我們測試了所有前任amp本文檔中的文件位於使用 Rasperry Pi OS(4 年 2020 月版)的 Pi XNUMXB 上。 第一次,需要使用屏幕和鍵盤來設置 Pi。 此後,使用您選擇的方法訪問 Pi 的操作系統。 除非另有說明,所有步驟都是強制性的
安裝
更新/升級
按照此處所述執行更新和升級: https://www.raspberrypi.org/documentation/raspbian/updating.md 
網絡配置(可選)
如果您從另一台機器通過 SSH 連接到 Pi,則值得為 Pi 提供一個固定的 IP 地址: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update 向 Pi 添加網絡安全設置也是一個好主意,以便它自動連接到網絡: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
將 Pi 設置為 USB OTG 小工具
在 Pi 上打開終端並按照以下步驟操作:
- 將 USB 驅動程序設置為 dwc2
迴聲“dtoverlay=dwc2”| sudo tee -a /boot/config.txt - 啟用 dwc2 驅動程序
迴聲“dwc2”| sudo tee -a /etc/modules sudo tee -a /etc/modules - 啟用 lib 複合驅動程序
echo“lib 複合”| sudo tee -a /etc/modules sudo tee -a /etc/modules -  啟用 MIDI 小工具 
迴聲“g_midi”| sudo tee -a /etc/modules sudo tee -a /etc/modules 
創建配置腳本:
- 創建 file
須藤觸摸 /usr/bin/midi_over_usb - 使其可執行
須藤 chmod +x /usr/bin/midi_over_usb - 用 Nano 編輯它
sudo nano /usr/bin/midi_over_usb 
將以下內容粘貼到 file,根據需要編輯產品和製造商字符串。 cd /sys/kernel/config/usb_gadget/ mkdir -p midi_over_usb cd midi_over_usb echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # 多功能複合小工具echo 0x0100 > bcdDevice # v1.0.0 echo 0x0200 > bcdUSB # USB2 mkdir -p strings/ 0x409 echo “fedcba9876543210” > strings/0x409/serialnumber echo “OSA Electronics” > strings/0x409/manufacturer echo “MIDI USB Device” > strings/0x409/product ls /sys/class/udc > UDC 退出 Nano 並保存 file (Ctrl+X、Y、回車)。 添加對 rc.local 腳本的調用,以便它在每次啟動時執行。 sudo nano /etc/rc.local 在“exit0”之前添加以下行 /usr/bin/midi_over_usb 退出 Nano 並保存 file 並重新啟動 Pi。 sudo restart 列出可用的 MIDI 端口。 amidi -l 如果 MIDI 配置正確,最後一個命令應輸出類似以下內容的內容: Dir Device Name IO hw:0,0 f_midi IO 硬件:0,0 f_midi
安裝Python庫
本節將解釋如何安裝我們首選的 Python 2.x 庫。
米多
Mido 是一個易於使用的用於處理 MIDI 數據的庫。 它依賴於 rt-midi 後端、asound 庫和 Jack。 按順序輸入以下命令: 輸出應顯示 16 個“Midi Through”端口和 0 個附加端口。 如果是這樣的話,那就萬事大吉了。 *注意:在 Mido 中,端口名稱是用單引號括起來的整個字符串,但可以將名稱截斷為冒號之前的字符串。 在本機上,字符串為:“f_midi:f_midi XNUMX:XNUMX”。 對於前ample,這兩個命令是等價的
GPIO
我們使用 Pigpio 庫與 GPIO 引腳連接。 我們發現該庫比與 Pi 硬件 (RPi.GPIO) 連接的標準方法更加穩定和靈活。 如果您想使用其他庫,請相應地編輯代碼。 要安裝 Pigpio 庫,請按照此處的說明進行操作: http://abyz.me.uk/rpi/pigpio/download.html 之前運行所有 examp下面的文件中,如果沒有完成,您應該啟動 Pigpio 服務:
蟒蛇amp萊斯
前任amples 還使用 numpy 庫的 interp 函數作為在兩個範圍之間映射的簡單方法。 我們使用 Reaper 來發送和接收數據。 Pi 在 Reaper 的首選項菜單中配置為硬件 MIDI 輸出。
使用音符數據控制 GPIO(例如ample_1_key_press.py) 這個前任ample 展示瞭如何:
- 使用簡單的條件監聽 3 個特定的音符開啟和音符關閉事件
 - 捕獲非音符數據發送到 Pi 時出現的異常(例如來自音序器的傳輸數據)
 - 將音符力度映射到輸出引腳的 PWM
 
導入相關庫,從 Pigpio 庫創建 pi 對象,並打開輸出端口: try/catch 塊用於捕獲因發送其他類型的 MIDI 數據(例如傳輸控制等)而產生的錯誤。 while True: try: #這會過濾掉 port.iter_pending() 中 msg 的所有非註釋數據: # 如果有消息待處理 if(msg.type == 'note_on'): # 如果是 Note On 消息輸出= interp (msg.velocity, [0,127],[0,255]) # 將速度從0-127 調整到0-255 #按音符編號過濾數據if(msg.note == 53): pi1.set_PWM_dutycycle(2, out ) elif (msg.note == 55): pi1.set_PWM_dutycycle(3, out) elif(msg.note == 57): pi1.set_PWM_dutycycle(4, out) else: # 如果消息未處於Note On 狀態(例如Note關閉) if(msg.note == 53): pi1.set_PWM_dutycycle(2, 0) elif(msg.note == 55): pi1.set_PWM_dutycycle(3, 0) elif(msg.note == 57): pi1. set_PWM_dutycycle( 4, 0) except AttributeError as error: print(“Error excepted”) pass
使用 Mod 和 Pitch 輪控制 GPIO(例如ample_2_wheels.py)
這個前任ample 展示瞭如何:
- 監聽音高和調製數據並按類型過濾它們
 - 將數據映射到輸出引腳的 PWM
 
這個前任ample 與上麵類似,具有以下消息類型:
- 音調輪的類型為pitchwheel,值為msg.pitch
 - Mod 輪是一個連續控制器類型 control_change,其控制參數為 msg.control = 1(CC 編號),值為 msg.value
 
從 GPIO 事件輸出 MIDI 數據 (gpio_event.py)
這個前任ample 展示瞭如何:
- 使用中斷來檢測按鈕按下
 - 將 MIDI 數據從 Pi 發送到另一台設備
 
打開輸出端口,創建兩條消息並將 GPIO 引腳設置為輸入。 這個前任amp文件假設有一個按鈕連接到引腳 21,因此按下按鈕時引腳會變為高電平: 以下是按下或釋放按鈕時調用的回調函數。 輸出端口 send() 函數只是將消息發送出端口:回調偵聽器在後台運行,不需要更多關注:
播放 MIDI File
這個前任ample 展示瞭如何:
- 加載 MIDI file 在編程環境中
 - 播放 file .
 
這個前任amples 假設您有 MIDI file 稱為 midi_file.mid 與 python 腳本位於同一目錄中: import mido from mido import MidiFile from mido import MetaMessage port = mido.open_output('f_midi') mid = MidiFile('midi_file.mid') while True: 用於 Midi 中的味精File('midi_file.mid').play(): port.send(msg)
文件/資源
![]()  | 
						Raspberry Pi OSA MIDI 板 [pdf] 使用者手冊 OSA MIDI、板  | 




