Scheda MIDI Raspberry Pi OSA

Configurazione di Raspberry Pi per MIDI
Questa guida mostrerà come prendere un Raspberry Pi appena installato e farlo funzionare come dispositivo I/O MIDI rilevabile dal sistema operativo. Fornirà anche alcuni example di utilizzare varie librerie Python per ottenere dati MIDI dentro e fuori dall'ambiente di programmazione. AGGIORNAMENTO – 11 settembre 2021.: Questa guida è stata aggiornata per risolvere alcuni problemi con l'ultima versione del sistema operativo Raspberry Pi, puoi anche scaricare un'immagine completa con script preinstallati e completamente configurata qui.
Di cosa abbiamo bisogno
- Raspberry Pi A+/B+/2/3B/3B+/4B
- Scheda MIDI per Raspberry Pi
- Una scheda MicroSD•Set di 4 viti in nylon M2.5
- Set di 4 distanziatori da femmina a femmina in nylon M2.5 * 11 mm
- Set di 4 distanziatori da maschio a femmina in nylon M2.5 * 5 mm
Assemblea
Usa le viti in nylon e i distanziatori per assemblare il Raspberry Pi insieme alla scheda MIDI, come mostrato nell'immagine qui sotto:

Prima configurazione
Abbiamo testato tutti gli example in questo documento su un Pi 4B che utilizza Rasperry Pi OS, versione maggio 2020). La prima volta, è necessario utilizzare uno schermo e una tastiera per configurare il Pi. Successivamente, usa il tuo metodo preferito per accedere al sistema operativo di Pi. Tutti i passaggi sono obbligatori se non diversamente specificato
Installazione
Aggiorna/Aggiorna
Eseguire l'aggiornamento e l'aggiornamento come descritto qui: https://www.raspberrypi.org/documentation/raspbian/updating.md
Configurazione di rete (opzionale)
Se stai eseguendo SSH da un'altra macchina nel Pi, vale la pena dare al Pi un indirizzo IP fisso: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update È anche una buona idea aggiungere le impostazioni di sicurezza della rete al Pi in modo che si connetta automaticamente alla rete: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
Imposta il Pi Up come gadget USB OTG
Apri un terminale sul Pi e segui questa procedura:
- Impostare il driver USB su dwc2
echo “dtoverlay=dwc2” | sudo tee -a /boot/config.txt - Abilita il driver dwc2
eco “dwc2” | sudo tee -a /etc/modules - Abilita il driver composito lib
echo “lib composita” | sudo tee -a /etc/modules - Abilita il gadget MIDI
eco “g_midi” | sudo tee -a /etc/modules
Crea lo script di configurazione:
- Crea il file
sudo touch /usr/bin/midi_over_usb - Rendilo eseguibile
sudo chmod +x /usr/bin/midi_over_usb - Modificalo con Nano
sudo nano /usr/bin/midi_over_usb
Incolla quanto segue nel file, apportando modifiche al prodotto e alle stringhe del produttore come richiesto. cd /sys/kernel/config/usb_gadget/ mkdir -p midi_over_usb cd midi_over_usb echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # Multifunzione Composite Gadget echo 0x0100 > bcdDevice # v1.0.0 echo 0x0200 > bcdUSB # USB2 mkdir -p strings/ 0x409 echo “fedcba9876543210” > strings/0x409/serialnumber echo “OSA Electronics” > strings/0x409/manufacturer echo “MIDI USB Device” > strings/0x409/product ls /sys/class/udc > UDC Esci da Nano e salva il file (Ctrl+X, Y, ritorno). Aggiungi una chiamata allo script a rc.local, in modo che venga eseguito ad ogni avvio. sudo nano /etc/rc.local Aggiungi la seguente riga prima di "exit0" /usr/bin/midi_over_usb Esci da Nano e salva file e riavvia il Pi. sudo reboot Elenca le porte MIDI disponibili. amidi -l Se il MIDI è configurato correttamente, l'ultimo comando dovrebbe produrre qualcosa di simile a: Dir Device Name IO hw:0,0 f_midi IO hw:0,0 f_midi
Installa librerie Python
Questa sezione spiegherà come installare le nostre librerie preferite per Python 2.x.
MIDO
Mido è una libreria facile da usare per la gestione dei dati MIDI. Si basa sul backend rt-midi, sulla libreria asound e su Jack. Immettere i seguenti comandi in sequenza: L'output dovrebbe mostrare una porta 'Midi Through' e una porta aggiuntiva. Se questo è il caso, va tutto bene. *Nota: in Mido, il nome della porta è l'intera stringa racchiusa tra virgolette singole, ma è possibile troncare il nome alla stringa prima dei due punti. Su questa macchina, la stringa è: 'f_midi:f_midi 16:0'. Per esample, questi due comandi sono equivalenti
PIGPIO
Usiamo la libreria pigpio per interfacciarci con i pin GPIO. Abbiamo riscontrato che questa libreria è più stabile e flessibile rispetto al metodo standard di interfacciamento con l'hardware del Pi (RPi.GPIO). Se desideri utilizzare un'altra libreria, modifica il codice di conseguenza. Per installare la libreria pigpio, segui le istruzioni qui: http://abyz.me.uk/rpi/pigpio/download.html Prima di eseguire tutti gli exampdi seguito, dovresti avviare il servizio pigpio se non fatto:
Python esamples
L'exampi le usano anche la funzione di interp della libreria numpy come un modo semplice per mappare tra due intervalli. Abbiamo usato Reaper per inviare e ricevere dati. Il Pi è configurato come uscita MIDI hardware nel menu delle preferenze di Reaper.
Controlla GPIO con i dati delle note (esample_1_key_press.py) Questo esample mostra come:
- Ascolta 3 specifici eventi di note-on e note-off usando una semplice condizione
- Cattura le eccezioni che si verificano quando i dati non di nota vengono inviati al Pi (ad es. dati di trasporto da un sequencer)
- Mappa la velocità della nota sul PWM del pin di uscita
Importa le librerie rilevanti, crea l'oggetto pi dalla libreria pigpio e apri la porta di output: Il blocco try/catch serve a catturare gli errori che derivano da altri tipi di dati MIDI inviati (es. controlli di trasporto ecc.). while True: try: #Questo filtra tutti i dati non di nota per i msg in port.iter_pending(): # se c'è un messaggio in sospeso if(msg.type == 'note_on'): # se è Nota su messaggio in uscita = interp(msg.velocity, [0,127],[0,255]) # scala la velocità da 0-127 a 0-255 #filtra i dati per numero di 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: # se il messaggio non è Nota su (ad es. 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) eccetto AttributeError as error: print(“Errore escluso”) pass
Controlla GPIO con Mod e Pitch Wheels (esample_2_ruote.py)
Questo example mostra come:
- Ascolta Pitch e Mod Data e filtrali per tipo
- Mappa i dati sul PWM del pin di uscita
Questo example è simile al precedente, con questi tipi di messaggi:
- La rotella Pitch è di tipo pitchwheel con un valore di msg.pitch
- La Mod Wheel è un controller continuo di tipo control_change con un parametro di controllo di msg.control = 1 (il numero CC) e un valore di msg.value
Invia dati MIDI da un evento GPIO (gpio_event.py)
Questo example mostra come:
- Utilizzare un'interruzione per rilevare la pressione di un pulsante
- Invia dati MIDI dal Pi a un altro dispositivo
Apri la porta di output, crea due messaggi e imposta il pin GPIO come input. Questo esample presuppone che ci sia un pulsante legato al pin 21, in modo che il pin diventi ALTO quando il pulsante viene premuto: Di seguito sono elencate le funzioni di richiamata chiamate quando il pulsante viene premuto o rilasciato. La funzione send() delle porte di output invia semplicemente il messaggio fuori dalla porta: i listener di callback vengono eseguiti in background e non hanno bisogno di ulteriore attenzione:
Riproduzione di un MIDI File
Questo example mostra come:
- Carica un MIDI file nell'ambiente di programmazione
- Riproduzione il file .
Questo examppresuppone che tu abbia un MIDI file chiamato midi_file.mid nella stessa directory del tuo script Python: import mido da mido import MidiFile da mido import MetaMessage port = mido.open_output('f_midi') mid = MidiFile('midi_file.mid') mentre True: per msg in MidiFile('midi_file.mid').play(): port.send(msg)
Documenti / Risorse
![]() |
Scheda MIDI Raspberry Pi OSA [pdf] Manuale d'uso OSA MIDI, Consiglio |




