Placa MIDI Raspberry Pi OSA

Configuració de Raspberry Pi per a MIDI
Aquesta guia mostrarà com agafar un Raspberry Pi recentment instal·lat i fer-lo funcionar com a dispositiu d'E/S MIDI descobert pel sistema operatiu. També proporcionarà alguns exampd'utilitzar diverses biblioteques de Python per introduir dades MIDI dins i fora de l'entorn de programació. ACTUALITZACIÓ - 11 de setembre de 2021.: Aquesta guia s'ha actualitzat per solucionar alguns problemes amb l'última versió del sistema operatiu Raspberry Pi, també podeu descarregar una imatge completa amb scripts preinstal·lats i completament configurats aquí.
El que necessitem
- Raspberry Pi A+/B+/2/3B/3B+/4B
- Placa MIDI per a Raspberry Pi
- Una targeta MicroSD•Conjunt de 4 cargols de niló M2.5
- Conjunt de 4 separadors de niló M2.5 * 11 mm femella a femella
- Conjunt de 4 separadors de niló M2.5*5mm mascle a femella
Assemblea
Utilitzeu els cargols de niló i els separadors per muntar el Raspberry Pi juntament amb la placa MIDI, tal com es mostra a la imatge següent:

Primera configuració
Hem provat tots els exampfitxers d'aquest document en un Pi 4B amb el sistema operatiu Rasperry Pi, versió de maig de 2020). La primera vegada, cal utilitzar una pantalla i un teclat per configurar el Pi. A continuació, utilitzeu el mètode que trieu per accedir al sistema operatiu de Pi. Tots els passos són obligatoris tret que s'indiqui el contrari
Instal·lació
Actualització/Actualització
Realitzeu l'actualització i l'actualització tal com es descriu aquí: https://www.raspberrypi.org/documentation/raspbian/updating.md
Configuració de xarxa (opcional)
Si esteu fent SSH des d'una altra màquina al Pi, val la pena donar-li una adreça IP fixa: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update També és una bona idea afegir la configuració de seguretat de la xarxa al Pi perquè es connecti automàticament a la xarxa: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
Configureu el Pi Up com a gadget USB OTG
Obriu un terminal al Pi i seguiu aquest procediment:
- Configureu el controlador USB a dwc2
echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt - Habiliteu el controlador dwc2
eco "dwc2" | sudo tee -a /etc/modules - Habiliteu el controlador compost lib
echo "lib compost" | sudo tee -a /etc/modules - Activa el gadget MIDI
echo “g_midi” | sudo tee -a /etc/modules
Creeu l'script de configuració:
- Crea el file
sudo touch /usr/bin/midi_over_usb - Feu que sigui executable
sudo chmod +x /usr/bin/midi_over_usb - Editeu-lo amb Nano
sudo nano /usr/bin/midi_over_usb
Enganxeu el següent al file, fent modificacions al producte i a les cadenes del fabricant segons sigui necessari. 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 n. 1.0.0x0 echo “fedcba0200” > strings/2x0/serialnumber echo “OSA Electronics” > strings/409x9876543210/manufacturer echo “MIDI USB Device” > strings/0x409/product ls /sys/class/udc > UDC Exit Nano > file (Ctrl+X, Y, retorn). Afegiu una crida a l'script a rc.local, de manera que s'executi a cada inici. sudo nano /etc/rc.local Afegiu la línia següent abans de "exit0" /usr/bin/midi_over_usb Sortiu de Nano i deseu el file i reinicieu el Pi. sudo reboot Llista els ports MIDI disponibles. amidi -l Si el MIDI està configurat correctament, l'última ordre hauria de sortir una cosa semblant a: Dir Nom del dispositiu IO hw:0,0 f_midi IO hw:0,0 f_midi
Instal·leu les biblioteques de Python
Aquesta secció explicarà com instal·lar les nostres biblioteques preferides per a Python 2.x.
MIDO
Mido és una biblioteca fàcil d'utilitzar per gestionar dades MIDI. Es basa en el backend rt-midi, la biblioteca asound i Jack. Introduïu les ordres següents en seqüència: La sortida hauria de mostrar un port "Midi Through" i un port addicional. Si aquest és el cas, tot està bé. *Nota: a Mido, el nom del port és la cadena sencera tancada entre cometes simples, però és possible truncar el nom a la cadena abans dels dos punts. En aquesta màquina, la cadena és: 'f_midi:f_midi 16:0'. Per example, aquestes dues ordres són equivalents
PIGPIO
Utilitzem la biblioteca pigpio per connectar amb els pins GPIO. Hem trobat que aquesta biblioteca és més estable i flexible que el mètode estàndard d'interfície amb el maquinari del Pi (RPi.GPIO). Si voleu utilitzar una altra biblioteca, editeu el codi en conseqüència. Per instal·lar la biblioteca pigpio, seguiu les instruccions aquí: http://abyz.me.uk/rpi/pigpio/download.html Abans d'executar tots els exampA continuació, hauríeu d'iniciar el servei pigpio si no ho feu:
Python Examples
L'exampels també utilitzen la funció interp de la biblioteca numpy com una manera fàcil de mapejar entre dos rangs. Hem utilitzat Reaper per enviar i rebre dades. El Pi es configura com a sortida MIDI de maquinari al menú de preferències de Reaper.
Controla GPIO amb dades de notes (p. example_1_key_press.py) Aquest exampli mostra com:
- Escolteu 3 esdeveniments específics d'activació i desactivació de notes utilitzant una condició senzilla
- Captureu les excepcions que sorgeixen quan s'envien dades que no són de notes al Pi (per exemple, transporteu dades des d'un seqüenciador)
- Assigna la velocitat de la nota al PWM del pin de sortida
Importeu les biblioteques rellevants, creeu l'objecte pi des de la biblioteca pigpio i obriu el port de sortida: el bloc try/catch és per detectar els errors que sorgeixen d'altres tipus de dades MIDI que s'envien (per exemple, controls de transport, etc.). mentre que True: prova: #Això filtra totes les dades que no són de notes per als missatges a port.iter_pending(): # si hi ha un missatge pendent if(msg.type == 'note_on'): # si és el missatge Note On out = interp(msg.velocity, [0,127],[0,255]) # velocitat d'escala de 0-127 a 0-255 #filtre les dades pel número de 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) else: # si el missatge no és Nota activada (p. ex. Nota 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) excepte AttributeError com a error: print("Error excepte") passa
Controla GPIO amb les rodes de modificació i de pas (p. example_2_wheels.py)
Aquest exampli mostra com:
- Escolteu les dades de to i modificacions i filtreu-les per tipus
- Assigna les dades al PWM del pin de sortida
Aquest exampel fitxer és similar a l'anterior, amb aquests tipus de missatges:
- La roda Pitch és de tipus pitchwheel amb un valor de msg.pitch
- La roda de modificacions és un tipus de controlador continu control_change amb un paràmetre de control de msg.control = 1 (el número CC) i un valor de msg.value
Sortida de dades MIDI des d'un esdeveniment GPIO (gpio_event.py)
Aquest exampli mostra com:
- Utilitzeu una interrupció per detectar una pressió de botó
- Envieu dades MIDI des del Pi a un altre dispositiu
Obriu el port de sortida, creeu dos missatges i configureu el pin GPIO com a entrada. Aquest exampLe suposa que hi ha un botó lligat al pin 21, de manera que aquest pin passa a ALTA quan es prem el botó: A continuació es mostren les funcions de devolució de trucada que es fan servir quan es prem o es deixa anar el botó. La funció send() dels ports de sortida simplement envia el missatge fora del port: els oients de devolució de trucada s'executen en segon pla i no necessiten més atenció:
Reprodueix un MIDI File
Aquest exampli mostra com:
- Carregueu un MIDI file en l'entorn de programació
- Reprodueix el file .
Aquest examples suposa que teniu un MIDI file anomenat midi_file.mid al mateix directori que el vostre script Python: import mido from mido import MidiFile des del port de MetaMessage d'importació de mido = mido.open_output('f_midi') mid = MidiFile('midi_file.mid') mentre que True: per a missatges en MidiFile('midi_file.mid').play(): port.send(msg)
Documents/Recursos
![]() |
Placa MIDI Raspberry Pi OSA [pdfManual d'usuari OSA MIDI, Junta |




