Raspberry-Pi-OSA-MIDI-board-LOGO

Raspberry Pi OSA MIDI Board

Raspberry-Pi-OSA-MIDI-board-PRODUCT

Opsætning af Raspberry Pi til MIDI

Denne vejledning viser, hvordan du tager en nyinstalleret Raspberry Pi og får den til at fungere som en OS-opdagelig MIDI I/O-enhed. Det vil også give nogle examples om at bruge forskellige Python-biblioteker til at få MIDI-data ind og ud af programmeringsmiljøet. OPDATERING – 11. september 2021.: Denne guide er blevet opdateret for at løse nogle problemer med den seneste Raspberry Pi OS-version, du kan også downloade et komplet billede med forudinstallerede scripts og fuldt konfigureret her.

Hvad vi har brug for

  • Raspberry Pi A+/B+/2/3B/3B+/4B
  • MIDI Board til Raspberry Pi
  • Et MicroSD-kort•Sæt med 4 Nylon M2.5-skruer
  • Sæt med 4 Nylon M2.5*11mm Hun til Hun Standoffs
  • Sæt med 4 nylon M2.5*5 mm han- til hun-standoffs

Forsamling

Brug nylonskruerne og afstandsstykkerne til at samle Raspberry Pi sammen med MIDI-kortet, som vist på billedet nedenfor:

Raspberry-Pi-OSA-MIDI-Board-1

Første gangs opsætning

Vi testede alle examples i dette dokument på en Pi 4B, der bruger Rasperry Pi OS, version maj 2020). Første gang er det nødvendigt at bruge en skærm og et tastatur til at sætte Pi op. Brug derefter din valgte metode til at få adgang til Pi's OS. Alle trin er obligatoriske, medmindre andet er angivet

Installation

Opdater/opgrader
Udfør opdateringen og opgrader som beskrevet her: https://www.raspberrypi.org/documentation/raspbian/updating.md

Netværkskonfiguration (valgfrit)
Hvis du SSH'er fra en anden maskine til Pi, er det umagen værd at give Pi en fast IP-adresse: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update Det er også en god idé at tilføje netværkssikkerhedsindstillingerne til Pi, så den automatisk forbinder til netværket: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md

Indstil Pi Up som en USB OTG-gadget
Åbn en terminal på Pi og følg denne procedure:

  • Indstil USB-driveren til dwc2
    ekko “dtoverlay=dwc2” | sudo tee -a /boot/config.txt
  • Aktiver dwc2-driveren
    ekko “dwc2” | sudo tee -a /etc/modules
  • Aktiver den sammensatte lib-driver
    ekko "lib composite" | sudo tee -a /etc/modules
  • Aktiver MIDI-gadget'en 
    ekko "g_midi" | sudo tee -a /etc/modules

Opret konfigurationsscriptet:

  • Opret file
    sudo touch /usr/bin/midi_over_usb
  • Gør det eksekverbart
    sudo chmod +x /usr/bin/midi_over_usb
  • Rediger den med Nano
    sudo nano /usr/bin/midi_over_usb

Indsæt følgende i file, foretage redigeringer af produkt- og producentens strenge efter behov. 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 > bcd1.0.0Devicedir/echo 0x0200 > bcd2Device0x409 > bcd9876543210DeviceDir. 0x409 ekko “fedcba0” > strenge/409x0/serienummer ekko “OSA Electronics” > strenge/409xXNUMX/fabrikant ekko “MIDI USB-enhed” > strenge/XNUMXxXNUMX/produkt ls /sys/class/udc > gem UDC-afslut file (Ctrl+X, Y, retur). Tilføj et kald til scriptet til rc.local, så det udføres ved hver opstart. sudo nano /etc/rc.local Tilføj følgende linje før "exit0" /usr/bin/midi_over_usb Afslut Nano og gem file og genstart Pi. sudo genstart Liste over de tilgængelige MIDI-porte. amidi -l Hvis MIDI'en er konfigureret korrekt, skal den sidste kommando udsende noget, der ligner: Dir Device Name IO hw:0,0 f_midi IO hw:0,0 f_midi

Installer Python Libraries

Dette afsnit vil forklare, hvordan du installerer vores foretrukne biblioteker til Python 2.x.

MIDO

Mido er et brugervenligt bibliotek til håndtering af MIDI-data. Den er afhængig af rt-midi-backend, asound-biblioteket og Jack. Indtast følgende kommandoer i rækkefølge: Outputtet skal vise en 'Midi Through'-port og en ekstra port. Hvis dette er tilfældet, er alt godt. *Bemærk: i Mido er portnavnet hele strengen omgivet af enkelte anførselstegn, men det er muligt at afkorte navnet til strengen før kolon. På denne maskine er strengen: 'f_midi:f_midi 16:0'. F.eksample, disse to kommandoer er ækvivalente

PIGPIO

Vi bruger pigpio-biblioteket til at interface med GPIO-benene. Vi har fundet ud af, at dette bibliotek er mere stabilt og fleksibelt end standardmetoden til interfacing med Pi's hardware (RPi.GPIO). Hvis du vil bruge et andet bibliotek, skal du redigere koden i overensstemmelse hermed. Følg instruktionerne her for at installere pigpio-biblioteket: http://abyz.me.uk/rpi/pigpio/download.html Før du kører alle exampnedenfor, skal du starte pigpio-tjenesten, hvis det ikke er gjort:

Python Examples

Eksamples bruger også numpy-bibliotekets interp-funktion som en nem måde at kortlægge mellem to områder. Vi brugte Reaper til at sende og modtage data. Pi'en er konfigureret som en hardware MIDI-output i Reapers præferencemenu.

Styr GPIO med notedata (f.eksample_1_key_press.py) Dette f.eksample viser hvordan man:

  • Lyt efter 3 specifikke note-on og note-off begivenheder ved hjælp af en simpel betingelse
  • Fang de undtagelser, der opstår, når ikke-nodedata sendes til Pi (f.eks. transportdata fra en sequencer)
  • Tilknyt nodehastigheden til udgangsstiftens PWM

Importer de relevante biblioteker, opret pi-objektet fra pigpio-biblioteket, og åbn output-porten: Try/catch-blokken skal fange de fejl, der opstår fra andre typer MIDI-data, der sendes (f.eks. transportkontrol osv.). mens True: prøv: #Dette bortfiltrerer alle ikke-note-data for msg i port.iter_pending(): # hvis der er en meddelelse afventende if(msg.type == 'note_on'): # hvis det er Note On message out = interp(msg.velocity, [0,127],[0,255]) # skalahastighed fra 0-127 til 0-255 #filtrer dataene efter nodenummer if(msg.note == 53): pi1.set_PWM_dutycycle(2, ud ) elif(msg.note == 55): pi1.set_PWM_dutycycle(3, out) elif(msg.note == 57): pi1.set_PWM_dutycycle(4, out) else: # hvis meddelelsen ikke er Note On (f.eks. Bemærk 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) undtagen AttributeError som fejl: print(“Error excepted”) pass

Styr GPIO med Mod og Pitch Wheels (f.eksample_2_wheels.py)
Denne example viser hvordan man:

  • Lyt efter Pitch og Mod Data og filtrer dem efter type
  • Tilknyt dataene til PWM af udgangsstiften

Denne example ligner ovenstående med disse meddelelsestyper:

  • Pitch-hjulet er typen pitchwheel med en værdi på msg.pitch
  • Mod-hjulet er en Continuous Controller-type control_change med en kontrolparameter på msg.control = 1 (CC-nummeret) og en værdi på msg.value

Output MIDI-data fra en GPIO-begivenhed (gpio_event.py)

Denne example viser hvordan man:

  • Brug en afbrydelse til at registrere et tryk på en knap
  • Send MIDI-data fra Pi til en anden enhed

Åbn udgangsporten, opret to beskeder, og opsæt GPIO-pinden som input. Denne example antager, at der er en knap bundet til pind 21, så pinden bliver HØJ, når knappen trykkes ned: Følgende er de tilbagekaldsfunktioner, der kaldes, når knappen trykkes eller slippes. Funktionen output ports send() sender simpelthen beskeden ud af porten: Tilbagekaldslytterne kører i baggrunden og behøver ikke mere opmærksomhed:

Afspil en MIDI File

Denne example viser hvordan man:

  • Indlæs en MIDI file i programmeringsmiljøet
  • Afspilning af file .

Denne examples antager, at du har en MIDI file kaldet midi_file.mid i samme mappe som dit python-script: importer mido fra mido importer MidiFile fra mido import MetaMessage port = mido.open_output('f_midi') mid = MidiFile('midi_file.mid') mens True: for msg i MidiFile('midi_file.mid').play(): port.send(msg)

Dokumenter/ressourcer

Raspberry Pi OSA MIDI Board [pdfBrugermanual
OSA MIDI, Board

Referencer

Efterlad en kommentar

Din e-mailadresse vil ikke blive offentliggjort. Påkrævede felter er markeret *