Raspberry-Pi-OSA-MIDI-Board-LOGO

Płyta Raspberry Pi OSA MIDI

Raspberry-Pi-OSA-MIDI-Board-PRODUKT

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:

Raspberry-Pi-OSA-MIDI-Płyta-1

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

Odniesienia

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *