Raspberry-Pi-OSA-MIDI-Board-LOGO

Raspberry Pi OSA MIDI Board

Raspberry-Pi-OSA-MIDI-Board-MƏHSUL

MIDI üçün Raspberry Pi qurulması

Bu bələdçi təzə quraşdırılmış Raspberry Pi-ni necə götürməyi və onu ƏS-də kəşf edilə bilən MIDI I/O cihazı kimi idarə etməyi göstərəcək. O, həmçinin bəzi köhnə təmin edəcəkampMIDI məlumatlarını proqramlaşdırma mühitinə daxil etmək və çıxmaq üçün müxtəlif Python kitabxanalarından istifadə etmək. YENİLƏNİB – 11 sentyabr 2021-ci il.: Bu təlimat Raspberry Pi OS-nin ən son versiyası ilə bağlı bəzi problemləri həll etmək üçün yenilənib, siz həmçinin əvvəlcədən quraşdırılmış skriptlərlə tam təsviri yükləyə və burada tam konfiqurasiya edə bilərsiniz.

Bizə nə lazımdır

  • Raspberry Pi A+/B+/2/3B/3B+/4B
  • Raspberry Pi üçün MIDI lövhəsi
  • MicroSD Kart•4 Neylon M2.5 Vida Dəsti
  • 4 Nylon M2.5*11mm Qadından Qadına Qarşılıqlı Dəst
  • 4 Nylon M2.5*5mm Kişidən Qadına Dəst

Məclis

Aşağıdakı şəkildə göstərildiyi kimi Raspberry Pi-ni MIDI lövhəsi ilə birlikdə yığmaq üçün neylon vintlər və dayaqlardan istifadə edin:

Raspberry-Pi-OSA-MIDI-Board-1

İlk dəfə quraşdırma

Bütün keçmişləri sınaqdan keçirdikamples bu sənəddə Rasperry Pi OS istifadə edən Pi 4B-də, may 2020-ci il versiyası). İlk dəfə Pi-ni qurmaq üçün ekran və klaviaturadan istifadə etmək lazımdır. Bundan sonra, Pi OS-yə daxil olmaq üçün seçdiyiniz metoddan istifadə edin. Əksi göstərilmədiyi təqdirdə bütün addımlar məcburidir

Quraşdırma

Yeniləyin/Yeniləyin
Burada təsvir edildiyi kimi yeniləmə və təkmilləşdirməni həyata keçirin: https://www.raspberrypi.org/documentation/raspbian/updating.md

Şəbəkə Konfiqurasiyası (İstəyə görə)
Əgər başqa bir maşından Pi-yə SSH edirsinizsə, Pi-yə sabit bir IP ünvanı verməyə dəyər: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update Şəbəkə təhlükəsizliyi parametrlərini Pi-yə əlavə etmək də yaxşı fikirdir ki, o, avtomatik olaraq şəbəkəyə qoşulsun: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md

Pi Up-ı USB OTG Gadget kimi qurun
Pi-də terminal açın və bu proseduru yerinə yetirin:

  • USB sürücüsünü dwc2 olaraq təyin edin
    echo “dtoverlay=dwc2” | sudo tee -a /boot/config.txt
  • dwc2 sürücüsünü aktivləşdirin
    echo “dwc2” | sudo tee -a /etc/modules
  • Lib kompozit sürücüsünü aktivləşdirin
    echo “lib kompozit” | sudo tee -a /etc/modules
  • MIDI qacetini aktiv edin 
    əks-səda “g_midi” | sudo tee -a /etc/modules

Konfiqurasiya skriptini yaradın:

  • yaradın file
    sudo touch /usr/bin/midi_over_usb
  • Bunu yerinə yetirək
    sudo chmod +x /usr/bin/midi_over_usb
  • Nano ilə redaktə edin
    sudo nano /usr/bin/midi_over_usb

Aşağıdakıları daxil edin file, tələb olunduqda məhsul və istehsalçı sətirlərinə düzəlişlər etmək. cd /sys/kernel/config/usb_gadget/ mkdir -p midi_over_usb cd midi_over_usb echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # Çoxfunksiyalı Kompozit Qadcet echo 0x0100 > bcd1.0.0 > bcd.0Bsd0200 > bcd.2Bsd0 > bcd.409Bs9876543210 # USBs0dir. 409x0 echo “fedcba409” > strings/0x409/seriya nömrəsi əks-səda “OSA Electronics” > strings/XNUMXxXNUMX/istehsalçı əks-səda “MIDI USB Device” > strings/XNUMXxXNUMX/product ls /sys/class/UDC və Exitno saxla > file (Ctrl+X, Y, qayıt). Skriptə rc.local-a zəng əlavə edin ki, o, hər başlanğıcda yerinə yetirilsin. sudo nano /etc/rc.local “exit0”-dan əvvəl aşağıdakı sətri əlavə edin /usr/bin/midi_over_usb Nano-dan çıxın və file və Pi-ni yenidən başladın. sudo reboot Mövcud MIDI portlarını sadalayın. amidi -l Əgər MIDI düzgün konfiqurasiya edilibsə, sonuncu əmr aşağıdakı kimi bir şey çıxarmalıdır: Dir Device Name IO hw:0,0 f_midi IO hw:0,0 f_midi

Python Kitabxanalarını quraşdırın

Bu bölmə Python 2.x üçün üstünlük verdiyimiz kitabxanaları necə quraşdırmağı izah edəcək.

MIDO

Mido MIDI məlumatlarını idarə etmək üçün istifadəsi asan kitabxanadır. O, rt-midi arxa planına, səs kitabxanasına və Cekə əsaslanır. Aşağıdakı əmrləri ardıcıllıqla daxil edin: Çıxışda bir 'Midi Through' portu və bir əlavə port göstərilməlidir. Əgər belədirsə, hər şey yaxşıdır. *Qeyd: Mido-da port adı tək dırnaq içərisində olan bütün sətirdir, lakin adı iki nöqtədən əvvəl olan sətirə qədər kəsmək mümkündür. Bu maşında sətir belədir: 'f_midi:f_midi 16:0'. məsələnample, bu iki əmr ekvivalentdir

PIGPIO

GPIO pinləri ilə əlaqə yaratmaq üçün pigpio kitabxanasından istifadə edirik. Biz bu kitabxananın Pi-nin aparatı (RPi.GPIO) ilə əlaqə qurmağın standart metodundan daha sabit və çevik olduğunu gördük. Başqa kitabxanadan istifadə etmək istəyirsinizsə, kodu müvafiq olaraq redaktə edin. Pigpio kitabxanasını quraşdırmaq üçün buradakı təlimatları izləyin: http://abyz.me.uk/rpi/pigpio/download.html Əvvəl bütün köhnə çalışanampAşağıdakı hallarda, edilmədikdə pigpio xidmətinə başlamalısınız:

Python Examples

keçmişamples həmçinin numpy kitabxanasının interp funksiyasını iki diapazon arasında xəritələşdirməyin asan yolu kimi istifadə edir. Məlumat göndərmək və qəbul etmək üçün Reaper istifadə etdik. Pi, Reaper-in seçimlər menyusunda Hardware MIDI çıxışı kimi konfiqurasiya edilmişdir.

GPIO-nu Qeyd Məlumatları ilə idarə edin (məsample_1_key_press.py) Bu keçmişample necə göstərildiyini göstərir:

  • Sadə şərtdən istifadə edərək 3 xüsusi qeyd və qeyd hadisəsinə qulaq asın
  • Qeyri-qeyd məlumatı Pi-yə göndərildikdə yaranan istisnaları tutun (məsələn, sequencerdən daşınma məlumatları)
  • Notun sürətini çıxış pininin PWM-ə uyğunlaşdırın

Müvafiq kitabxanaları idxal edin, pigpio kitabxanasından pi obyektini yaradın və çıxış portunu açın: Sınaq/tutmaq bloku göndərilən digər növ MIDI məlumatlarından (məsələn, nəqliyyat idarəetmələri və s.) yaranan səhvləri tutmaq üçündür. while True: cəhd edin: #Bu, port.iter_pending(): # gözləntidə olan mesaj varsa if(msg.type == 'not_on'): # Bu, Not On mesajıdırsa, bütün qeyd olmayan məlumatları filtrləyir. = interp(msg.velocity, [0,127],[0,255]) # miqyas sürəti 0-127 ilə 0-255 #verilənləri qeyd nömrəsi ilə süzün, əgər(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) başqa: # əgər mesaj Qeyd Aktiv deyilsə (məsələn, Qeyd) 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) AttributeError istisna olmaqla, xəta olaraq: çap ("Xəta istisna olunur") keçidi

Mod və Pitch Təkərləri ilə GPIO-ya nəzarət edin (məsample_2_wheels.py)
Bu keçmişample necə göstərildiyini göstərir:

  • Pitch və Mod Məlumatlarına qulaq asın və onları növə görə süzün
  • Məlumatı çıxış pininin PWM-ə uyğunlaşdırın

Bu keçmişample bu mesaj növləri ilə yuxarıdakılara bənzəyir:

  • Meydança çarxı msg.pitch dəyəri olan təkər növüdür
  • Mod Təkəri msg.control = 1 (CC nömrəsi) nəzarət parametri və msg.value dəyəri olan Davamlı Nəzarətçi tipli control_change növüdür.

GPIO hadisəsindən MIDI məlumatını çıxarın (gpio_event.py)

Bu keçmişample necə göstərildiyini göstərir:

  • Düymənin basılmasını aşkar etmək üçün fasilədən istifadə edin
  • MIDI məlumatlarını Pi-dən başqa cihaza göndərin

Çıxış portunu açın, iki mesaj yaradın və GPIO pinini giriş kimi qurun. Bu keçmişample güman edir ki, pin 21-ə bağlanmış düymə var, beləliklə, düyməyə basıldıqda pin YÜKSƏK olur: Aşağıdakılar düymə basıldıqda və ya buraxıldıqda çağırılan geri çağırış funksiyalarıdır. Çıxış portlarının send() funksiyası sadəcə mesajı portdan kənara göndərir: Geri çağırış dinləyiciləri arxa planda işləyir və daha çox diqqət tələb etmir:

MIDI-ni oxudun File

Bu keçmişample necə göstərildiyini göstərir:

  • MIDI yükləyin file proqramlaşdırma mühitində
  • Oynatın file .

Bu keçmişamples sizin MIDI olduğunu güman edir file midi_ adlanırfile.mid python skriptinizlə eyni kataloqda: mido import Midi-dən mido import edinFile mido import MetaMessage portundan = mido.open_output('f_midi') mid = MidiFile('midi_file.mid') isə True: Midi dilində mesaj üçünFile('midi_file.mid').play(): port.göndər(msg)

Sənədlər / Resurslar

Raspberry Pi OSA MIDI Board [pdf] İstifadəçi Təlimatı
OSA MIDI, İdarə Heyəti

İstinadlar

Şərh buraxın

E-poçt ünvanınız dərc olunmayacaq. Tələb olunan sahələr qeyd olunub *