Framboos-Pi-OSA-MIDI-bord-LOGO

Raspberry Pi OSA MIDI-bord

Framboos-Pi-OSA-MIDI-bord-PRODUK

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:

Framboos-Pi-OSA-MIDI-bord-1

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

Verwysings

Los 'n opmerking

Jou e-posadres sal nie gepubliseer word nie. Vereiste velde is gemerk *