Raspberry Pi OSA MIDI тактасы

MIDI үчүн Raspberry Pi орнотуу
Бул колдонмо жаңы орнотулган Raspberry Piди кантип алып, аны OS тарабынан табыла турган MIDI I/O түзмөгү катары иштетүүнү көрсөтөт. Ал ошондой эле кээ бир экс камсыз кылатampMIDI маалыматтарын программалоо чөйрөсүнө жана андан тышкары алуу үчүн ар кандай Python китепканаларын колдонуу. ЖАҢЫРТУУ – 11-жылдын 2021-сентябры.: Бул колдонмо Raspberry Pi OSтин акыркы версиясындагы айрым маселелерди чечүү үчүн жаңыртылган, ошондой эле алдын ала орнотулган скрипттери менен толук сүрөттү жүктөп алсаңыз болот жана бул жерден толугу менен конфигурацияланган.
Бизге эмне керек
- Raspberry Pi A+/B+/2/3B/3B+/4B
- Raspberry Pi үчүн MIDI тактасы
- MicroSD картасы•4 нейлон M2.5 бурамалар топтому
- 4 нейлон M2.5*11мм аялдан аялга чейин топтому
- 4 нейлон M2.5*5мм эркектен аялга чейин топтом
Ассамблея
Төмөнкү сүрөттө көрсөтүлгөндөй, Raspberry Pi менен MIDI тактасын чогултуу үчүн нейлон бурамаларын жана бекиткичтерди колдонуңуз:

Биринчи жолу орнотуу
Биз мурункулардын баарын сынап көрдүкamples бул документте Rasperry Pi OS колдонгон Pi 4B, 2020-жылдын май версиясы). Биринчи жолу, Pi орнотуу үчүн экранды жана баскычтопту колдонуу керек. Андан кийин, Pi's OSке кирүү үчүн тандаган ыкмаңызды колдонуңуз. Башкасы көрсөтүлбөсө, бардык кадамдар милдеттүү болуп саналат
Орнотуу
Жаңыртуу/Жаңыртуу
Бул жерде сүрөттөлгөндөй жаңыртууну жана жаңыртууну аткарыңыз: https://www.raspberrypi.org/documentation/raspbian/updating.md
Тармак конфигурациясы (кошумча)
Эгерде сиз башка машинадан Pi'ге SSH'ди киргизип жатсаңыз, Pi'ге туруктуу IP дарегин берүү пайдалуу: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update Тармактын коопсуздук орнотууларын Pi'ге кошуу да жакшы идея, ал тармакка автоматтык түрдө кошулат: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
Pi Upти USB OTG гаджети катары орнотуңуз
Pi боюнча терминалды ачып, бул процедураны аткарыңыз:
- USB драйверин dwc2 кылып коюңуз
echo “dtoverlay=dwc2” | sudo tee -a /boot/config.txt - dwc2 драйверин иштетиңиз
echo “dwc2” | sudo tee -a /etc/modules - lib курама драйверин иштетүү
echo “lib composite” | sudo tee -a /etc/modules - MIDI гаджетин иштетүү
echo “g_midi” | sudo tee -a /etc/modules
Конфигурация скриптин түзүңүз:
- түзүү file
sudo touch /usr/bin/midi_over_usb - Аны аткарылуучу кылып жасаңыз
sudo chmod +x /usr/bin/midi_over_usb - Аны Nano менен түзөтүңүз
sudo nano /usr/bin/midi_over_usb
Төмөнкүгө чаптаңыз file, талапка ылайык продукт жана өндүрүүчү саптарына түзөтүүлөрдү киргизүү. cd /sys/kernel/config/usb_gadget/ mkdir -p midi_over_usb cd midi_over_usb echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # Көп функционалдуу Композиттик Гаджет echo 0x0100 > bcd.B1.0.0 > bcd.B0 # USB0200. mkdir -p саптары/ 2x0 echo “fedcba409” > саптар/9876543210x0/сериялык номер жаңырыгы “OSA Electronics” > саптар/409x0/өндүрүүчүнүн жаңырыгы “MIDI USB түзмөгү” > саптар/409x0/продукт ls /sys/class/udc жана Nasa сактоо > file (Ctrl+X, Y, кайтаруу). Скриптке rc.local үчүн чалууну кошуңуз, ал ар бир баштаганда аткарылат. sudo nano /etc/rc.local "exit0" алдында төмөнкү сапты кошуңуз /usr/bin/midi_over_usb Нанодон чыгып, сактаңыз file жана Pi кайра жүктөө. sudo reboot Жеткиликтүү MIDI порттордун тизмеси. amidi -l Эгерде MIDI туура конфигурацияланса, акыркы буйрук төмөнкүгө окшош нерсени чыгарышы керек: Dir Device Name IO hw:0,0 f_midi IO hw:0,0 f_midi
Python китепканаларын орнотуу
Бул бөлүмдө Python 2.x үчүн биздин тандаган китепканаларды кантип орнотуу керектиги түшүндүрүлөт.
MIDO
Mido - бул MIDI маалыматтарын иштетүү үчүн колдонууга оңой китепкана. Ал rt-midi серверине, үн китепканасына жана Джекке таянат. Төмөнкү буйруктарды ырааттуу түрдө киргизиңиз: Чыгуу бир 'Midi Through' портун жана бир кошумча портту көрсөтүшү керек. Эгер ушундай болсо, анда баары жакшы болот. *Эскертүү: Мидодо порттун аталышы бир тырмакчага алынган бүт сап болуп саналат, бирок атын эки чекиттин алдындагы сапка чейин кыскартууга болот. Бул машинада сап: 'f_midi: f_midi 16:0'. Мисалы үчүнampле, бул эки буйрук эквиваленттүү
PIGPIO
Биз GPIO пиндери менен интерфейс үчүн pigpio китепканасын колдонобуз. Биз бул китепкананы Pi аппараттык камсыздоосу (RPi.GPIO) менен иштөөнүн стандарттык ыкмасына караганда туруктуураак жана ийкемдүү деп таптык. Эгер сиз башка китепкананы колдонгуңуз келсе, кодду ошого жараша түзөтүңүз. Pigpio китепканасын орнотуу үчүн бул жердеги нускамаларды аткарыңыз: http://abyz.me.uk/rpi/pigpio/download.html Мурда бардык эксampТөмөндө, эгер аткарылбаса, pigpio кызматын баштоо керек:
Python Examples
мурдагыamples ошондой эле numpy китепканасынын интерп функциясын эки диапазондун ортосундагы картаны түзүүнүн оңой жолу катары колдонушат. Биз маалыматтарды жөнөтүү жана алуу үчүн Reaperди колдондук. Pi Reaper'тин артыкчылыктар менюсунда Hardware MIDI чыгышы катары конфигурацияланган.
Эскертүү маалыматтары менен GPIOну башкаруу (мисample_1_key_press.py) Бул мурункуample кантип көрсөтөт:
- Жөнөкөй шартты колдонуп, 3 конкреттүү эскертүү жана эскертүү окуяларын угуңуз
- Пиге нотадан башка маалыматтар жөнөтүлгөндө пайда болгон өзгөчөлүктөрдү кармаңыз (мисалы, секвенсерден транспорттук маалыматтар)
- Ноталардын ылдамдыгын чыгаруу пининин PWMине картага түшүрүңүз
Тиешелүү китепканаларды импорттоо, pigpio китепканасынан pi объектин түзүү жана чыгаруу портун ачуу: try/catch блогу жөнөтүлүп жаткан MIDI маалыматтарынын башка түрлөрүнөн келип чыккан каталарды кармоо (мисалы, транспортту башкаруу ж.б.). while True: аракет кылыңыз: #Бул port.iter_pending(): # бул билдирүү күтүүдө болсо, if(msg.type == 'note_on'): # эгер ал Эскертүү билдирүү болсо = interp(msg.velocity, [0,127],[0,255]) # шкала ылдамдыгы 0-127ден 0-255ке чейин #маалыматты нота номери боюнча чыпкалоо, эгерде(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) башка: # эгерде билдирүү Эскертүү күйүк болбосо (мисалы, Эскертүү) Өчүк) 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: print("Ката алынып салынды") өтүү
Mod жана Pitch Wheels менен GPIOну башкаруу (мисample_2_wheels.py)
Бул эксample кантип көрсөтөт:
- Pitch жана Mod маалыматтарын угуп, аларды түрү боюнча чыпкалаңыз
- Маалыматтарды чыгаруу пининин PWMине картага түшүрүңүз
Бул эксample бул билдирүү түрлөрү менен жогорудагыга окшош:
- Pitch дөңгөлөгү msg.pitch маанисине ээ болгон тепкич дөңгөлөк түрү
- Mod Wheel - msg.control = 1 башкаруу параметри (CC саны) жана msg.value мааниси менен control_change тибиндеги Үзгүлтүксүз контроллер.
GPIO окуясынан MIDI берилиштерин чыгаруу (gpio_event.py)
Бул эксample кантип көрсөтөт:
- Баскычты басууну аныктоо үчүн үзүүнү колдонуңуз
- MIDI дайындарын Piден башка түзмөккө жөнөтүңүз
Чыгуу портун ачып, эки билдирүү түзүңүз жана GPIO пинди киргизүү катары орнотуңуз. Бул эксample 21 пинге байланган баскыч бар деп болжолдойт, андыктан баскыч басылганда пин ЖОГОРКУ болуп калат: Төмөнкүлөр баскыч басылганда же бошотулганда чакырылган кайра чалуу функциялары. Output ports send() функциясы жөн гана билдирүүнү порттун сыртына жөнөтөт: Кайра чалууларды угуучулар фондо иштейт жана башка көңүл бурууну талап кылбайт:
MIDI ойнотуу File
Бул эксample кантип көрсөтөт:
- MIDI жүктөө file программалоо чөйрөсүндө
- Ойнотуу file .
Бул эксamples сизде MIDI бар деп ойлойт file midi_ деп аталатfile.mid сиздин python скриптиңиз менен бир каталогдо: mido импорттоо Midiден mido импорттооFile mido импорттоодон MetaMessage порту = mido.open_output('f_midi') mid = MidiFile('midi_file.mid') while True: Midi тилиндеги билдирүү үчүнFile('midi_file.mid').play(): port.send(msg)
Документтер / Ресурстар
![]() |
Raspberry Pi OSA MIDI тактасы [pdf] Колдонуучунун колдонмосу OSA MIDI, Башкармалык |




