Raspberry Pi OSA MIDI-bord

Stel Raspberry Pi vir MIDI op
Hierdie gids sal wys hoe om 'n vars geïnstalleerde Raspberry Pi te neem en dit as 'n OS-ontdekbare MIDI I/O-toestel te laat werk. Dit sal ook 'n paar examples van die gebruik van verskeie Python-biblioteke om MIDI-data in en uit die programmeringsomgewing te kry. UPDATE – 11 Sep 2021.: Hierdie gids is opgedateer om sommige probleme met die nuutste Raspberry Pi OS-weergawe op te los, jy kan ook 'n volledige prent aflaai met vooraf geïnstalleerde skrifte en volledig hier gekonfigureer.
Wat ons nodig het
- Raspberry Pi A+/B+/2/3B/3B+/4B
- MIDI-bord vir Raspberry Pi
- 'n MicroSD-kaart•Stel van 4 Nylon M2.5-skroewe
- Stel van 4 Nylon M2.5*11mm vroulike tot vroulike afstande
- Stel van 4 nylon M2.5*5 mm manlike tot vroulike afstande
Vergadering
Gebruik die nylonskroewe en afstandstukke om die Raspberry Pi saam met die MIDI-bord te monteer, soos op die prent hieronder getoon:

Eerste keer opstelling
Ons het al die eks getoetsamples in hierdie dokument op 'n Pi 4B met Rasperry Pi OS, weergawe Mei 2020). Die eerste keer is dit nodig om 'n skerm en sleutelbord te gebruik om die Pi op te stel. Gebruik daarna jou keusemetode om toegang tot die Pi se bedryfstelsel te verkry. Alle stappe is verpligtend tensy anders vermeld
Installasie
Dateer/gradeer op
Voer die opdatering en opgradering uit soos hier beskryf: https://www.raspberrypi.org/documentation/raspbian/updating.md
Netwerkopstelling (opsioneel)
As jy van 'n ander masjien na die Pi SSH gaan, is dit die moeite werd om die Pi 'n vaste IP-adres te gee: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update Dit is ook 'n goeie idee om die netwerksekuriteitinstellings by die Pi te voeg sodat dit outomaties aan die netwerk sal koppel: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
Stel die Pi Up as 'n USB OTG Gadget
Maak 'n terminaal op die Pi oop en volg hierdie prosedure:
- Stel die USB-bestuurder op dwc2
eggo “dtoverlay=dwc2” | sudo tee -a /boot/config.txt - Aktiveer die dwc2-bestuurder
eggo “dwc2” | sudo tee -a /etc/modules - Aktiveer die lib saamgestelde drywer
eggo “lib composite” | sudo tee -a /etc/modules - Aktiveer die MIDI-toestel
eggo "g_midi" | sudo tee -a /etc/modules
Skep die konfigurasie script:
- Skep die file
sudo touch /usr/bin/midi_over_usb - Maak dit uitvoerbaar
sudo chmod +x /usr/bin/midi_over_usb - Redigeer dit met Nano
sudo nano /usr/bin/midi_over_usb
Plak die volgende in die file, maak wysigings aan die produk- en vervaardigerstringe soos vereis. cd /sys/kernel/config/usb_gadget/ mkdir -p midi_over_usb cd midi_over_usb echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # Multifunctionele Saamgestelde Gadget echo 0x0100 > bcd1.0.0Device0kings # bcd0200x2kings # bcd0kings 409x9876543210 eggo “fedcba0” > strings/409x0/reeksnommer eggo “OSA Electronics” > snare/409x0/vervaardiger eggo “MIDI USB-toestel” > snare/409xXNUMX/produk ls /sys/class/udc > stoor die UDC-uitgang file (Ctrl+X, Y, keer terug). Voeg 'n oproep by die script by rc.local, sodat dit by elke opstart uitgevoer word. sudo nano /etc/rc.local Voeg die volgende reël by voor “exit0” /usr/bin/midi_over_usb Verlaat Nano en stoor die file en herlaai die Pi. sudo herlaai Lys die beskikbare MIDI-poorte. amidi -l As die MIDI korrek gekonfigureer is, moet die laaste opdrag iets soortgelyks uitvoer as: Dir Toestelnaam IO hw:0,0 f_midi IO hw:0,0 f_midi
Installeer Python Libraries
Hierdie afdeling sal verduidelik hoe om ons voorkeurbiblioteke vir Python 2.x te installeer.
MIDO
Mido is 'n maklik-om-te gebruik biblioteek vir die hantering van MIDI data. Dit maak staat op die rt-midi backend, die asound-biblioteek en Jack. Voer die volgende opdragte in volgorde in: Die uitvoer moet een 'Midi Through'-poort en een bykomende poort wys. As dit die geval is, is alles goed. *Let wel: in Mido is die poortnaam die hele string ingesluit in enkele aanhalingstekens, maar dit is moontlik om die naam na die string voor die dubbelpunt af te kap. Op hierdie masjien is die string: 'f_midi:f_midi 16:0'. Byvoorbeeldample, hierdie twee opdragte is ekwivalent
PIGPIO
Ons gebruik die pigpio-biblioteek om met die GPIO-penne te koppel. Ons het gevind dat hierdie biblioteek meer stabiel en buigsaam is as die standaardmetode om met die Pi se hardeware (RPi.GPIO) te koppel. As jy 'n ander biblioteek wil gebruik, wysig die kode dienooreenkomstig. Volg die instruksies hier om die pigpio-biblioteek te installeer: http://abyz.me.uk/rpi/pigpio/download.html Voor hardloop al die examples hieronder, moet jy die pigpio-diens begin as dit nie gedoen word nie:
Python Examples
Die eksamplese gebruik ook die numpy-biblioteek se interp-funksie as 'n maklike manier om tussen twee reekse te karteer. Ons het Reaper gebruik om data te stuur en te ontvang. Die Pi is gekonfigureer as 'n Hardeware MIDI-uitvoer in Reaper se voorkeure-kieslys.
Beheer GPIO met notadata (bvample_1_key_press.py) Hierdie bvample wys hoe om:
- Luister vir 3 spesifieke noot-op en noot-af gebeurtenisse deur 'n eenvoudige toestand te gebruik
- Vang die uitsonderings wat ontstaan wanneer nie-noot data na die Pi gestuur word (bv. vervoer data vanaf 'n sequencer)
- Karteer die nootsnelheid na die PWM van die uitsetpen
Voer die relevante biblioteke in, skep die pi-objek vanaf die pigpio-biblioteek, en maak die uitvoerpoort oop: Die probeer/vang-blok is om die foute op te vang wat voortspruit uit ander tipes MIDI-data wat gestuur word (bv. vervoerkontroles ens.). while True: try: #Dit filtreer alle nie-nootdata vir boodskap in port.iter_pending(): # as daar 'n boodskap hangende is if(msg.type == 'note_on'): # if it is Note On message out = interp(msg.velocity, [0,127],[0,255]) # skaalsnelheid van 0-127 tot 0-255 #filtreer die data volgens nootnommer if(msg.note == 53): pi1.set_PWM_dutycycle(2, uit) ) elif(msg.note == 55): pi1.set_PWM_dutycycle(3, out) elif(msg.note == 57): pi1.set_PWM_dutycycle(4, out) else: # as die boodskap nie Nota Aan is nie (bv. Nota) Af) 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) behalwe AttributeError as error: print(“Error excepted”) slaag
Beheer GPIO met Mod en Pitch Wheels (bvample_2_wheels.py)
Hierdie example wys hoe om:
- Luister vir toonhoogte- en modifikasiedata en filter dit volgens tipe
- Kaart die data na die PWM van die uitsetpen
Hierdie example is soortgelyk aan bogenoemde, met hierdie boodskaptipes:
- Die Pitch-wiel is tipe pitchwheel met 'n waarde van msg.pitch
- Die Mod Wheel is 'n Kontinue Kontroleerder tipe control_change met 'n beheerparameter van msg.control = 1 (die CC-nommer) en 'n waarde van msg.value
Voer MIDI-data uit van 'n GPIO-gebeurtenis (gpio_event.py)
Hierdie example wys hoe om:
- Gebruik 'n onderbreking om 'n knoppie te bespeur
- Stuur MIDI-data van die Pi na 'n ander toestel
Maak die uitsetpoort oop, skep twee boodskappe en stel die GPIO-pen op as 'n invoer. Hierdie example neem aan dat daar 'n knoppie aan pen 21 gekoppel is, sodat die pen HOOG word wanneer die knoppie gedruk word: Die volgende is die terugbelfunksies wat genoem word wanneer die knoppie gedruk of vrygelaat word. Die output ports send() funksie stuur eenvoudig die boodskap uit die poort: Die terugbelluisteraars loop in die agtergrond en het nie meer aandag nodig nie:
Speel 'n MIDI File
Hierdie example wys hoe om:
- Laai 'n MIDI file in die programmeringsomgewing
- Speel die file .
Hierdie examples neem aan jy het 'n MIDI file genoem midi_file.mid in dieselfde gids as jou luislangskrif: voer mido in vanaf mido invoer MidiFile vanaf mido invoer MetaMessage-poort = mido.open_output('f_midi') mid = MidiFile('midi_file.mid') terwyl True: vir boodskap in MidiFile('midi_file.mid').play(): port.send(msg)
Dokumente / Hulpbronne
![]() |
Raspberry Pi OSA MIDI-bord [pdfGebruikershandleiding OSA MIDI, Raad |




