Płyta Raspberry Pi OSA MIDI

Konfigurowanie Raspberry Pi dla MIDI
W tym przewodniku pokażemy, jak wziąć świeżo zainstalowanego Raspberry Pi i uruchomić go jako wykrywalne przez system operacyjny urządzenie MIDI I/O. Przedstawi on również kilka przykładówamples of using various Python library to get MIDI data into and out of the programming environment. UPDATE – 11 Sep 2021.: Ten przewodnik został zaktualizowany, aby naprawić niektóre problemy z najnowszą wersją Raspberry Pi OS, możesz również pobrać pełny obraz z preinstalowanymi skryptami i w pełni skonfigurowany tutaj.
Czego potrzebujemy
- Raspberry Pi A+/B+/2/3B/3B+/4B
- Płyta MIDI dla Raspberry Pi
- Karta MicroSD•Zestaw 4 śrub nylonowych M2.5
- Zestaw 4 nylonowych dystansów M2.5*11mm żeńskich do żeńskich
- Zestaw 4 nylonowych dystansów M2.5*5mm męskich i żeńskich
Montaż
Za pomocą śrub nylonowych i dystansów zmontuj Raspberry Pi z płytką MIDI, jak pokazano na poniższym obrazku:

Pierwsza konfiguracja
Przetestowaliśmy wszystkie examples w tym dokumencie na Pi 4B z systemem Rasperry Pi OS, wersja maj 2020). Za pierwszym razem konieczne jest użycie ekranu i klawiatury, aby skonfigurować Pi. Następnie użyj wybranej metody, aby uzyskać dostęp do systemu operacyjnego Pi. Wszystkie kroki są obowiązkowe, chyba że podano inaczej
Instalacja
Aktualizacja/uaktualnienie
Wykonaj aktualizację i uaktualnienie zgodnie z opisem tutaj: https://www.raspberrypi.org/documentation/raspbian/updating.md
Konfiguracja sieci (opcjonalnie)
Jeśli łączysz się z Pi przez SSH z innego komputera, warto nadać Pi stały adres IP: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update Dobrym pomysłem jest również dodanie ustawień zabezpieczeń sieciowych do Raspberry Pi, aby automatycznie łączyć się z siecią: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
Skonfiguruj Pi Up jako gadżet USB OTG
Otwórz terminal na Raspberry Pi i wykonaj następującą procedurę:
- Ustaw sterownik USB na dwc2
echo „dtoverlay=dwc2” | sudo tee -a /boot/config.txt - Włącz sterownik dwc2
echo „dwc2” | sudo tee -a /etc/modules - Włącz sterownik lib composite
echo „lib composite” | sudo tee -a /etc/modules - Włącz gadżet MIDI
echo „g_midi” | sudo tee -a /etc/modules
Utwórz skrypt konfiguracji:
- Utwórz file
sudo touch /usr/bin/midi_over_usb - Uczyń go wykonywalnym
sudo chmod +x /usr/bin/midi_over_usb - Edytuj za pomocą Nano
sudo nano /usr/bin/midi_over_usb
Wklej poniższy tekst do file, edytując w razie potrzeby ciągi produktu i producenta. cd /sys/kernel/config/usb_gadget/ mkdir -p midi_over_usb cd midi_over_usb echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # Wielofunkcyjny gadżet kompozytowy 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 Wyjdź z Nano i zapisz file (Ctrl+X, Y, return). Dodaj wywołanie skryptu do rc.local, aby był wykonywany przy każdym uruchomieniu. sudo nano /etc/rc.local Dodaj następujący wiersz przed „exit0” /usr/bin/midi_over_usb Wyjdź z Nano i zapisz file i zrestartuj Pi. sudo reboot Wyświetla listę dostępnych portów MIDI. amidi -l Jeśli MIDI jest skonfigurowane poprawnie, ostatnie polecenie powinno zwrócić coś podobnego do: Dir Nazwa urządzenia IO hw:0,0 f_midi IO sprzęt: 0,0 f_midi
Zainstaluj biblioteki Pythona
W tej sekcji wyjaśnimy, jak zainstalować preferowane przez nas biblioteki dla języka Python 2.x.
MIDO
Mido to łatwa w użyciu biblioteka do obsługi danych MIDI. Opiera się na zapleczu rt-midi, bibliotece asound i Jack. Wprowadź następujące polecenia w kolejności: Wyjście powinno pokazywać jeden port „Midi Through” i jeden dodatkowy port. Jeśli tak jest, wszystko jest w porządku. *Uwaga: w Mido nazwa portu to cały ciąg ujęta w pojedyncze cudzysłowy, ale można skrócić nazwę do ciągu przed dwukropkiem. Na tym komputerze ciąg to: „f_midi:f_midi 16:0”. Na przykładample, te dwa polecenia są równoważne
Świnka
Używamy biblioteki pigpio do interfejsu z pinami GPIO. Odkryliśmy, że ta biblioteka jest bardziej stabilna i elastyczna niż standardowa metoda interfejsu ze sprzętem Pi (RPi.GPIO). Jeśli chcesz użyć innej biblioteki, odpowiednio edytuj kod. Aby zainstalować bibliotekę pigpio, postępuj zgodnie z instrukcjami tutaj: http://abyz.me.uk/rpi/pigpio/download.html Wcześniej uruchomiłem wszystkie exampponiżej, jeśli jeszcze tego nie zrobiłeś, powinieneś uruchomić usługę pigpio:
Przykład Pythonaamples
Byłyamples używają również funkcji interp biblioteki numpy jako łatwego sposobu mapowania między dwoma zakresami. Użyliśmy Reapera do wysyłania i odbierania danych. Pi jest skonfigurowane jako wyjście MIDI sprzętowe w menu preferencji Reapera.
Sterowanie GPIO za pomocą danych notatek (np.ample_1_key_press.py) Ten byłyamppokazuje jak:
- Nasłuchuj 3 konkretnych zdarzeń „nut-on” i „nut-off” za pomocą prostego warunku
- Wychwytywanie wyjątków, które powstają, gdy do Pi wysyłane są dane inne niż nuty (np. dane transportowe z sekwencera)
- Zmapuj prędkość nuty na PWM pinu wyjściowego
Zaimportuj odpowiednie biblioteki, utwórz obiekt pi z biblioteki pigpio i otwórz port wyjściowy: Blok try/catch ma wychwytywać błędy powstające w wyniku wysyłania innych typów danych MIDI (np. sterowanie transportem itp.). while True: try: #To filtruje wszystkie dane niebędące nutami dla wiadomości w porcie.iter_pending(): # jeśli istnieje oczekująca wiadomość if(msg.type == 'note_on'): # jeśli jest to Note On message out = interp(msg.velocity, [0,127],[0,255]) # skala prędkości od 0-127 do 0-255 #filtruj dane według numeru nuty 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: # jeśli wiadomość nie jest Note On (np. Note 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) z wyjątkiem AttributeError jako błąd: print(“Error excepted”) pass
Sterowanie GPIO za pomocą kółek Mod i Pitch (np.amp(le_2_wheels.py)
Ten byłyamppokazuje jak:
- Nasłuchuj danych o wysokości dźwięku i modulacji i filtruj je według typu
- Zmapuj dane na PWM pinu wyjściowego
Ten byłyample jest podobny do powyższego, z następującymi typami wiadomości:
- Koło Pitch jest typu pitchwheel o wartości msg.pitch
- Koło Modów to kontroler ciągły typu control_change z parametrem sterującym msg.control = 1 (numer CC) i wartością msg.value
Wyjście danych MIDI ze zdarzenia GPIO (gpio_event.py)
Ten byłyamppokazuje jak:
- Użyj przerwania, aby wykryć naciśnięcie przycisku
- Wysyłanie danych MIDI z Pi do innego urządzenia
Otwórz port wyjściowy, utwórz dwie wiadomości i skonfiguruj pin GPIO jako wejście. Ten exampzakłada, że do pinu 21 jest przypięty przycisk, więc pin przechodzi w stan WYSOKI po naciśnięciu przycisku: Poniżej przedstawiono funkcje wywołania zwrotnego wywoływane po naciśnięciu lub zwolnieniu przycisku. Funkcja send() portów wyjściowych po prostu wysyła komunikat z portu: Słuchacze wywołania zwrotnego działają w tle i nie potrzebują więcej uwagi:
Odtwarzanie MIDI File
Ten byłyamppokazuje jak:
- Załaduj MIDI file w środowisku programistycznym
- Odtwórz file .
Ten byłyamples zakłada, że masz MIDI file nazywany midi_file.mid w tym samym katalogu co skrypt Pythona: import mido from mido import MidiFile z importu mido MetaMessage port = mido.open_output('f_midi') mid = MidiFile(midi_file.mid') while True: dla wiadomości w MidiFile(midi_file.mid').play(): port.send(wiadomość)
Dokumenty / Zasoby
![]() |
Płyta Raspberry Pi OSA MIDI [plik PDF] Instrukcja obsługi OSA MIDI, Płyta |




