Raspberry Pi OSA MIDI Bord

Twaqqif ta 'Raspberry Pi għal MIDI
Din il-gwida se turi kif tieħu Raspberry Pi li għadu kif ġie installat u tħaddem bħala apparat MIDI I/O li jista’ jinkixef mill-OS. Se tipprovdi wkoll xi exampl-użu ta' diversi libreriji Python biex id-dejta MIDI tidħol u toħroġ mill-ambjent tal-ipprogrammar. AĠĠORNAMENT - 11 ta 'Settembru 2021.: Din il-gwida ġiet aġġornata biex tirranġa xi kwistjonijiet bl-aħħar verżjoni tal-OS Raspberry Pi, tista' wkoll tniżżel immaġni sħiħa bi skripts installati minn qabel u kkonfigurat kompletament hawn.
Dak li għandna bżonn
- Raspberry Pi A+/B+/2/3B/3B+/4B
- Bord MIDI għal Raspberry Pi
- A MicroSD Card•Sett ta '4 Viti tan-najlon M2.5
- Sett ta '4 tan-najlon M2.5 * 11mm Female għal Female Standoffs
- Sett ta '4 Nylon M2.5 * 5mm Standoffs maskili għal femminili
Assemblea
Uża l-viti tan-najlon u standoffs biex tgħaqqad il-Raspberry Pi flimkien mal-Bord MIDI, kif muri fuq l-immaġni hawn taħt:

Setup għall-ewwel darba
Ittestjajna l-ex kollhaamples f'dan id-dokument fuq Pi 4B bl-użu ta' Rasperry Pi OS, verżjoni ta' Mejju 2020). L-ewwel darba, huwa meħtieġ li tuża skrin u tastiera biex tissettja l-Pi up. Minn hemm 'il quddiem, uża l-metodu tal-għażla tiegħek biex taċċessa l-OS tal-Pi. Il-passi kollha huma obbligatorji sakemm ma jkunx iddikjarat mod ieħor
Installazzjoni
Aġġornament/Aġġornament
Wettaq l-aġġornament u l-aġġornament kif deskritt hawn: https://www.raspberrypi.org/documentation/raspbian/updating.md
Konfigurazzjoni tan-Netwerk (Mhux obbligatorju)
Jekk qed SSH'ing minn magna oħra fil-Pi, huwa utli li tagħti lill-Pi indirizz IP fiss: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update Hija wkoll idea tajba li żżid is-settings tas-sigurtà tan-netwerk mal-Pi sabiex awtomatikament tikkonnettja man-netwerk: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
Issettja l-Pi Up bħala USB OTG Gadget
Iftaħ terminal fuq il-Pi u segwi din il-proċedura:
- Issettja s-sewwieq USB għal dwc2
eku “dtoverlay=dwc2” | sudo tee -a /boot/config.txt - Ippermetti s-sewwieq dwc2
eku “dwc2” | sudo tee -a /etc/modules - Ippermetti s-sewwieq kompost lib
eku “lib kompost” | sudo tee -a /etc/modules - Ippermetti l-gadget MIDI
eku “g_midi” | sudo tee -a /etc/modules
Oħloq l-iskrittura tal-konfigurazzjoni:
- Oħloq il- file
sudo touch /usr/bin/midi_over_usb - Jagħmluha eżekutibbli
sudo chmod +x /usr/bin/midi_over_usb - Editjaha b'Nano
sudo nano /usr/bin/midi_over_usb
Paste dan li ġej fil- file, tagħmel edits għall-prodott u l-kordi tal-manifattur kif meħtieġ. 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.0bc0 kordi/ 0200x2 echo “fedcba0” > strings/409x9876543210/serialnumber echo “OSA Electronics” > strings/0x409/manufacturer echo “MIDI USB Device” > strings/0x409/product ls /sys/class/udc > UDC Exit Nano > UDC Exit Nano file (Ctrl+X, Y, ritorn). Żid sejħa għall-iskript għal rc.local, sabiex tesegwixxi fuq kull startup. sudo nano /etc/rc.local Żid il-linja li ġejja qabel “exit0” /usr/bin/midi_over_usb Ħruġ Nano u ssalva l- file u reboot il-Pi. sudo reboot Elenka l-portijiet MIDI disponibbli. amidi -l Jekk il-MIDI huwa kkonfigurat sew, l-aħħar kmand għandu joħroġ xi ħaġa simili għal: Dir Device Name IO hw:0,0 f_midi IO hw:0,0 f_midi
Installa Libreriji Python
Din it-taqsima se tispjega kif tinstalla l-libreriji preferuti tagħna għal Python 2.x.
MIDO
Mido hija librerija faċli biex tużah għall-immaniġġjar tad-dejta MIDI. Jiddependi fuq il-backend rt-midi, il-librerija asound, u Jack. Daħħal il-kmandi li ġejjin f'sekwenza: L-output għandu juri port wieħed 'Midi Through' u port ieħor. Jekk dan huwa l-każ, kollox sew. *Nota: f'Mido, l-isem tal-port huwa s-sekwenza kollha magħluqa fi kwotazzjonijiet singoli, iżda huwa possibbli li l-isem jinqata 'ma' l-istring qabel il-kolon. Fuq din il-magna, is-sekwenza hija: 'f_midi:f_midi 16:0'. Per example, dawn iż-żewġ kmandi huma ekwivalenti
PIGPIO
Aħna nużaw il-librerija tal-pigpio biex nagħmlu interface mal-pinnijiet GPIO. Sibna li din il-librerija hija aktar stabbli u flessibbli mill-metodu standard ta 'interfacing mal-ħardwer tal-Pi (RPi.GPIO). Jekk trid tuża librerija oħra, editja l-kodiċi kif xieraq. Biex tinstalla l-librerija pigpio, segwi l-istruzzjonijiet hawn: http://abyz.me.uk/rpi/pigpio/download.html Qabel tmexxija kollha ta 'l-examples hawn taħt, għandek tibda s-servizz pigpio jekk ma jsirx:
Python Eżamples
L-examples jużaw ukoll il-funzjoni tal-interp tal-librerija numpy bħala mod faċli biex timmappa bejn żewġ firxiet. Użajna Reaper biex nibagħtu u nirċievu data. Il-Pi huwa kkonfigurat bħala output MIDI tal-Hardware fil-menu tal-preferenzi ta 'Reaper.
Ikkontrolla GPIO b'Dejta tan-Nota (eżample_1_key_press.py) Dan example turi kif:
- Isma' għal 3 avvenimenti speċifiċi ta' note-on u note-off billi tuża kundizzjoni sempliċi
- Aqbad l-eċċezzjonijiet li jinqalgħu meta tintbagħat dejta mhux nota lill-Pi (eż. dejta tat-trasport minn sekwencer)
- Ippjana l-veloċità tan-nota mal-PWM tal-pin tal-ħruġ
Importa l-libreriji rilevanti, oħloq l-oġġett pi mil-librerija pigpio, u tiftaħ il-port tal-ħruġ: Il-blokk try/catch huwa li taqbad l-iżbalji li jinqalgħu minn tipi oħra ta 'data MIDI li qed tintbagħat (eż. kontrolli tat-trasport eċċ.). filwaqt li Veru: ipprova: #Dan jiffiltra d-dejta kollha li mhix nota għal msg fil-port.iter_pending(): # jekk ikun hemm messaġġ pendenti if(msg.type == 'note_on'): # jekk huwa Note On message out = interp(msg.velocity, [0,127],[0,255]) # veloċità tal-iskala minn 0-127 sa 0-255 #iffiltra d-dejta bin-numru tan-nota 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) inkella: # jekk il-messaġġ mhuwiex Nota Fuq (eż. Nota Mitfi) 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) ħlief AttributeError bħala żball: print(“Żball ħlief”) jgħaddi
Ikkontrolla GPIO b'Mod u Pitch Wheels (eżample_2_wheels.py)
Dan example turi kif:
- Isma għal Pitch u Mod Data u ffiltrahom skond it-tip
- Map id-data mal-PWM tal-pin tal-output
Dan example hija simili għal dan ta 'hawn fuq, b'dawn it-tipi ta' messaġġi:
- Ir-rota Pitch hija tip pitchwheel b'valur ta' msg.pitch
- Ir-Rota Mod hija tip ta' Kontrollur Kontinwu control_change b'parametru ta' kontroll ta' msg.control = 1 (in-numru CC) u valur ta' msg.value
Oħroġ Dejta MIDI minn Avveniment GPIO (gpio_event.py)
Dan example turi kif:
- Uża interruzzjoni biex tiskopri agħfas ta 'buttuna
- Ibgħat dejta MIDI mill-Pi għal apparat ieħor
Iftaħ il-port tal-ħruġ, oħloq żewġ messaġġi u waqqaf il-pin GPIO bħala input. Dan example jassumi li hemm buttuna marbuta mal-pin 21, sabiex dik il-pin tmur GĦOLJA meta l-buttuna tiġi ppressata: Dawn li ġejjin huma l-funzjonijiet ta 'callback imsejħa meta l-buttuna tiġi ppressata jew rilaxxata. Il-funzjoni tal-output ports send() sempliċement tibgħat il-messaġġ barra mill-port: Is-semmiegħa tar-callback jimxu fl-isfond u m'għandhomx bżonn aktar attenzjoni:
Daqq ta' MIDI File
Dan example turi kif:
- Tagħbija MIDI file fl-ambjent tal-ipprogrammar
- Daqq tal- file .
Dan examples jassumi li għandek MIDI file imsejjaħ midi_file.mid fl-istess direttorju bħall-iskrittura python tiegħek: importazzjoni mido minn mido importazzjoni MidiFile minn importazzjoni mido MetaMessage port = mido.open_output('f_midi') mid = MidiFile('midi_file.mid') filwaqt li Veru: għal msg fil-MidiFile('midi_file.mid').play(): port.send(msg)
Dokumenti / Riżorsi
![]() |
Raspberry Pi OSA MIDI Bord [pdfManwal tal-Utent OSA MIDI, Bord |




