Placă MIDI Raspberry Pi OSA

Configurarea Raspberry Pi pentru MIDI
Acest ghid vă va arăta cum să luați un Raspberry Pi proaspăt instalat și să îl operați ca dispozitiv MIDI I/O detectabil de sistemul de operare. Va oferi, de asemenea, niște exampfișiere de utilizare a diferitelor biblioteci Python pentru a introduce date MIDI în și în afara mediului de programare. ACTUALIZARE – 11 septembrie 2021.: Acest ghid a fost actualizat pentru a remedia unele probleme cu cea mai recentă versiune a sistemului de operare Raspberry Pi, de asemenea, puteți descărca o imagine completă cu scripturi preinstalate și complet configurate aici.
Ce avem nevoie
- Raspberry Pi A+/B+/2/3B/3B+/4B
- Placă MIDI pentru Raspberry Pi
- Un card MicroSD•Set de 4 șuruburi din nailon M2.5
- Set de 4 suporturi din nailon M2.5*11mm mamă la mamă
- Set de 4 separatoare din nailon M2.5*5mm mascul la femela
Asamblare
Utilizați șuruburile din nailon și distanțele pentru a asambla Raspberry Pi împreună cu placa MIDI, așa cum se arată în imaginea de mai jos:

Configurare pentru prima dată
Am testat toate exampfișierele din acest document pe un Pi 4B folosind sistemul de operare Rasperry Pi, versiunea mai 2020). Prima dată, este necesar să utilizați un ecran și o tastatură pentru a configura Pi up. După aceea, utilizați metoda dorită pentru a accesa sistemul de operare al lui Pi. Toți pașii sunt obligatorii, dacă nu se specifică altfel
Instalare
Actualizare/Actualizare
Efectuați actualizarea și upgrade-ul așa cum este descris aici: https://www.raspberrypi.org/documentation/raspbian/updating.md
Configurare rețea (opțional)
Dacă transferați SSH de pe o altă mașină în Pi, merită să îi oferiți lui Pi o adresă IP fixă: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update De asemenea, este o idee bună să adăugați setările de securitate a rețelei la Pi, astfel încât acesta să se conecteze automat la rețea: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
Setați Pi Up ca gadget USB OTG
Deschideți un terminal pe Pi și urmați această procedură:
- Setați driverul USB la dwc2
ecou „dtoverlay=dwc2” | sudo tee -a /boot/config.txt - Activați driverul dwc2
ecou „dwc2” | sudo tee -a /etc/modules - Activați driverul compozit lib
ecou „lib compozit” | sudo tee -a /etc/modules - Activați gadgetul MIDI
ecou „g_midi” | sudo tee -a /etc/modules
Creați scriptul de configurare:
- Creați file
sudo touch /usr/bin/midi_over_usb - Faceți executabil
sudo chmod +x /usr/bin/midi_over_usb - Editați-l cu Nano
sudo nano /usr/bin/midi_over_usb
Lipiți următoarele în file, efectuând modificări ale șirurilor de produs și producător, după cum este necesar. cd /sys/kernel/config/usb_gadget/ mkdir -p midi_over_usb cd midi_over_usb echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # Multifunction Composite Gadget echo 0x0100 > bcdDevice # v1.0.0dir/bcd0. 0200x2 echo „fedcba0” > șiruri/409x9876543210/număr de serie echo „OSA Electronics” > șiruri/0x409/producător ecou „MIDI USB Device” > șiruri/0x409/product ls /sys/class/udc > și salvați UDC Exit Nano file (Ctrl+X, Y, întoarcere). Adăugați un apel la script la rc.local, astfel încât să se execute la fiecare pornire. sudo nano /etc/rc.local Adăugați următoarea linie înainte de „exit0” /usr/bin/midi_over_usb Ieșiți din Nano și salvați file și reporniți Pi. sudo reboot Listează porturile MIDI disponibile. amidi -l Dacă MIDI-ul este configurat corect, ultima comandă ar trebui să scoată ceva similar cu: Dir Device Name IO hw:0,0 f_midi IO hw:0,0 f_midi
Instalați bibliotecile Python
Această secțiune va explica cum să instalați bibliotecile noastre preferate pentru Python 2.x.
MIDO
Mido este o bibliotecă ușor de utilizat pentru manipularea datelor MIDI. Se bazează pe backend-ul rt-midi, biblioteca asound și Jack. Introduceți următoarele comenzi în secvență: Ieșirea ar trebui să arate un port „Midi Through” și un port suplimentar. Dacă acesta este cazul, totul este bine. *Notă: în Mido, numele portului este întregul șir cuprins între ghilimele simple, dar este posibil să trunchiați numele la șirul înainte de două puncte. Pe această mașină, șirul este: „f_midi:f_midi 16:0”. De example, aceste două comenzi sunt echivalente
PIGPIO
Folosim biblioteca pigpio pentru a interfața cu pinii GPIO. Am descoperit că această bibliotecă este mai stabilă și mai flexibilă decât metoda standard de interfață cu hardware-ul lui Pi (RPi.GPIO). Dacă doriți să utilizați o altă bibliotecă, editați codul în consecință. Pentru a instala biblioteca pigpio, urmați instrucțiunile de aici: http://abyz.me.uk/rpi/pigpio/download.html Înainte de a rula toate exampmai jos, ar trebui să porniți serviciul pigpio dacă nu ați terminat:
Python Examples
Exampfișierele folosesc, de asemenea, funcția interp a bibliotecii numpy ca o modalitate ușoară de a mapa între două intervale. Am folosit Reaper pentru a trimite și a primi date. Pi este configurat ca o ieșire MIDI hardware în meniul de preferințe al lui Reaper.
Controlați GPIO cu date note (example_1_key_press.py) Acest example arată cum să:
- Ascultați 3 evenimente specifice de activare și dezactivare a notelor folosind o condiție simplă
- Prindeți excepțiile care apar atunci când datele non-notă sunt trimise către Pi (de exemplu, date de transport de la un secvențior)
- Mapați viteza notei la PWM-ul pinului de ieșire
Importați bibliotecile relevante, creați obiectul pi din biblioteca pigpio și deschideți portul de ieșire: Blocul try/catch este pentru a surprinde erorile care apar din trimiterea altor tipuri de date MIDI (de exemplu, controale de transport etc.). în timp ce este Adevărat: încercați: #Acest lucru elimină toate datele non-notă pentru mesaje în port.iter_pending(): # dacă există un mesaj în așteptare if(msg.type == 'note_on'): # dacă este Note On message out = interp(msg.velocity, [0,127],[0,255]) # scala viteza de la 0-127 la 0-255 #filtreaza datele dupa numarul notei 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: # dacă mesajul nu este Note On (de exemplu, Notă Off) 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) cu excepția AttributeError ca eroare: print(„Eroare exceptată”) trece
Controlați GPIO cu mod și roți de pas (example_2_wheels.py)
Acest example arată cum să:
- Ascultați Pitch and Mod Data și filtrați-le după tip
- Mapați datele la PWM-ul pinului de ieșire
Acest exampchiul este similar cu cel de mai sus, cu aceste tipuri de mesaje:
- Roata Pitch este de tip pitchwheel cu o valoare msg.pitch
- Roata de mod este un controler continuu de tip control_change cu un parametru de control de msg.control = 1 (numărul CC) și o valoare de msg.value
Ieșiți date MIDI dintr-un eveniment GPIO (gpio_event.py)
Acest example arată cum să:
- Utilizați o întrerupere pentru a detecta apăsarea unui buton
- Trimiteți date MIDI de la Pi la alt dispozitiv
Deschideți portul de ieșire, creați două mesaje și configurați pinul GPIO ca intrare. Acest exampSe presupune că există un buton legat de pinul 21, astfel încât acel pin devine HIGH când butonul este apăsat: Următoarele sunt funcțiile de apel invers apelate când butonul este apăsat sau eliberat. Funcția porturi de ieșire send() trimite pur și simplu mesajul din port: ascultătorii de apel invers rulează în fundal și nu au nevoie de mai multă atenție:
Redați un MIDI File
Acest example arată cum să:
- Încărcați un MIDI file în mediul de programare
- Redare file .
Acest exampLes presupune că aveți un MIDI file numit midi_file.mid în același director cu scriptul dvs. python: import mido din mido import MidiFile din mido import MetaMessage port = mido.open_output('f_midi') mid = MidiFile('midi_file.mid') în timp ce True: pentru mesaj în MidiFile('midi_file.mid').play(): port.send(msg)
Documente/Resurse
![]() |
Placă MIDI Raspberry Pi OSA [pdfManual de utilizare OSA MIDI, Board |




