റാസ്ബെറി പൈ ഒഎസ്എ മിഡി ബോർഡ്
മിഡിക്കായി റാസ്ബെറി പൈ സജ്ജീകരിക്കുന്നു
പുതുതായി ഇൻസ്റ്റാൾ ചെയ്ത റാസ്ബെറി പൈ എങ്ങനെ എടുക്കാമെന്നും അത് OS-കണ്ടെത്താനാകുന്ന MIDI I/O ഉപകരണമായി എങ്ങനെ പ്രവർത്തിപ്പിക്കാമെന്നും ഈ ഗൈഡ് കാണിക്കും. ഇത് ചില മുൻകൂർ നൽകുംampപ്രോഗ്രാമിംഗ് പരിതസ്ഥിതിയിൽ നിന്നും പുറത്തേക്കും മിഡി ഡാറ്റ ലഭിക്കുന്നതിന് വിവിധ പൈത്തൺ ലൈബ്രറികൾ ഉപയോഗിക്കുന്നില്ല. അപ്ഡേറ്റ് – സെപ്തംബർ 11, 2021.: ഏറ്റവും പുതിയ Raspberry Pi OS പതിപ്പിലെ ചില പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ ഈ ഗൈഡ് അപ്ഡേറ്റ് ചെയ്തു, മുൻകൂട്ടി ഇൻസ്റ്റാൾ ചെയ്ത സ്ക്രിപ്റ്റുകൾ ഉപയോഗിച്ച് നിങ്ങൾക്ക് പൂർണ്ണമായി കോൺഫിഗർ ചെയ്ത ഒരു പൂർണ്ണ ചിത്രം ഡൗൺലോഡ് ചെയ്യാനും കഴിയും.
നമുക്ക് വേണ്ടത്
- റാസ്ബെറി പൈ A+/B+/2/3B/3B+/4B
- റാസ്ബെറി പൈയ്ക്കുള്ള മിഡി ബോർഡ്
- ഒരു മൈക്രോ എസ്ഡി കാർഡ്•4 നൈലോൺ എം2.5 സ്ക്രൂകളുടെ സെറ്റ്
- 4 നൈലോൺ M2.5*11mm ഫീമെയിൽ മുതൽ പെൺ സ്റ്റാൻഡ്ഓഫ്സ്
- 4 നൈലോൺ M2.5*5mm പുരുഷന്മാർക്കും സ്ത്രീകൾക്കും വേണ്ടിയുള്ള സ്റ്റാൻഡോഫുകളുടെ സെറ്റ്
അസംബ്ലി
ചുവടെയുള്ള ചിത്രത്തിൽ കാണിച്ചിരിക്കുന്നതുപോലെ, മിഡി ബോർഡിനൊപ്പം റാസ്ബെറി പൈ അസംബ്ലി ചെയ്യാൻ നൈലോൺ സ്ക്രൂകളും സ്റ്റാൻഡ്ഓഫുകളും ഉപയോഗിക്കുക:
ആദ്യമായി സജ്ജീകരണം
ഞങ്ങൾ എല്ലാ മുൻഗാമികളെയും പരീക്ഷിച്ചുampRasperry Pi OS, പതിപ്പ് മെയ് 4 ഉപയോഗിച്ച് Pi 2020B-യിൽ ഈ ഡോക്യുമെന്റിൽ ഉണ്ട്). ആദ്യമായി, പൈ അപ്പ് സജ്ജീകരിക്കാൻ ഒരു സ്ക്രീനും കീബോർഡും ഉപയോഗിക്കേണ്ടത് ആവശ്യമാണ്. അതിനുശേഷം, പൈയുടെ OS ആക്സസ് ചെയ്യാൻ നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന രീതി ഉപയോഗിക്കുക. മറ്റുവിധത്തിൽ പറഞ്ഞിട്ടില്ലെങ്കിൽ എല്ലാ നടപടികളും നിർബന്ധമാണ്
ഇൻസ്റ്റലേഷൻ
അപ്ഡേറ്റ്/അപ്ഗ്രേഡ് ചെയ്യുക
ഇവിടെ വിവരിച്ചിരിക്കുന്നതുപോലെ അപ്ഡേറ്റും അപ്ഗ്രേഡും നടത്തുക: https://www.raspberrypi.org/documentation/raspbian/updating.md
നെറ്റ്വർക്ക് കോൺഫിഗറേഷൻ (ഓപ്ഷണൽ)
നിങ്ങൾ മറ്റൊരു മെഷീനിൽ നിന്ന് പൈയിലേക്ക് SSH ചെയ്യുകയാണെങ്കിൽ, പൈയ്ക്ക് ഒരു നിശ്ചിത ഐപി വിലാസം നൽകുന്നത് മൂല്യവത്താണ്: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update നെറ്റ്വർക്ക് സുരക്ഷാ ക്രമീകരണങ്ങൾ പൈയിലേക്ക് ചേർക്കുന്നതും നല്ലതാണ്, അതുവഴി അത് നെറ്റ്വർക്കിലേക്ക് യാന്ത്രികമായി കണക്റ്റുചെയ്യും: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
പൈ അപ് ഒരു USB OTG ഗാഡ്ജെറ്റായി സജ്ജീകരിക്കുക
പൈയിൽ ഒരു ടെർമിനൽ തുറന്ന് ഈ നടപടിക്രമം പിന്തുടരുക:
- USB ഡ്രൈവർ dwc2 ആയി സജ്ജമാക്കുക
പ്രതിധ്വനി “dtoverlay=dwc2” | sudo tee -a /boot/config.txt - dwc2 ഡ്രൈവർ പ്രവർത്തനക്ഷമമാക്കുക
എക്കോ "dwc2" | sudo tee -a /etc/modules - ലിബ് കോമ്പോസിറ്റ് ഡ്രൈവർ പ്രവർത്തനക്ഷമമാക്കുക
എക്കോ "ലിബ് കോമ്പോസിറ്റ്" | sudo tee -a /etc/modules - MIDI ഗാഡ്ജെറ്റ് പ്രവർത്തനക്ഷമമാക്കുക
പ്രതിധ്വനി "g_midi" | sudo tee -a /etc/modules
കോൺഫിഗറേഷൻ സ്ക്രിപ്റ്റ് സൃഷ്ടിക്കുക:
- സൃഷ്ടിക്കുക file
സുഡോ ടച്ച് /usr/bin/midi_over_usb - ഇത് എക്സിക്യൂട്ടബിളാക്കി മാറ്റുക
sudo chmod +x /usr/bin/midi_over_usb - നാനോ ഉപയോഗിച്ച് ഇത് എഡിറ്റ് ചെയ്യുക
സുഡോ നാനോ /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 # Multifunction Composite Gadget 0x0100 echo “fedcba1.0.0” > സ്ട്രിംഗുകൾ/0x0200/സീരിയൽ നമ്പർ എക്കോ “OSA ഇലക്ട്രോണിക്സ്” > സ്ട്രിങ്ങുകൾ/2x0/നിർമ്മാതാവ് എക്കോ “MIDI USB ഉപകരണം” > സ്ട്രിംഗ്സ്/409x9876543210/ഉൽപ്പന്നങ്ങൾ സംരക്ഷിക്കുക. file (Ctrl+X, Y, റിട്ടേൺ). rc.local-ലേക്ക് സ്ക്രിപ്റ്റിലേക്ക് ഒരു കോൾ ചേർക്കുക, അതുവഴി എല്ലാ സ്റ്റാർട്ടപ്പുകളിലും അത് എക്സിക്യൂട്ട് ചെയ്യും. sudo nano /etc/rc.local "exit0" /usr/bin/midi_over_usb എന്നതിന് മുമ്പായി ഇനിപ്പറയുന്ന വരി ചേർക്കുക നാനോയിൽ നിന്ന് പുറത്തുകടന്ന് സംരക്ഷിക്കുക file പൈ റീബൂട്ട് ചെയ്യുക. sudo reboot ലഭ്യമായ MIDI പോർട്ടുകൾ ലിസ്റ്റ് ചെയ്യുക. amidi -l MIDI ശരിയായി ക്രമീകരിച്ചിട്ടുണ്ടെങ്കിൽ, അവസാന കമാൻഡ് ഇതുപോലെ എന്തെങ്കിലും ഔട്ട്പുട്ട് ചെയ്യണം: Dir ഉപകരണ നാമം IO hw:0,0 f_midi IO hw:0,0 f_midi
പൈത്തൺ ലൈബ്രറികൾ ഇൻസ്റ്റാൾ ചെയ്യുക
പൈത്തൺ 2.x-നായി ഞങ്ങൾ തിരഞ്ഞെടുത്ത ലൈബ്രറികൾ എങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാമെന്ന് ഈ വിഭാഗം വിശദീകരിക്കും.
MIDO
മിഡി ഡാറ്റ കൈകാര്യം ചെയ്യുന്നതിനായി ഉപയോഗിക്കാൻ എളുപ്പമുള്ള ഒരു ലൈബ്രറിയാണ് മിഡോ. ഇത് rt-midi ബാക്കെൻഡ്, asound ലൈബ്രറി, ജാക്ക് എന്നിവയെ ആശ്രയിക്കുന്നു. ഇനിപ്പറയുന്ന കമാൻഡുകൾ ക്രമത്തിൽ നൽകുക: ഔട്ട്പുട്ട് ഒരു 'മിഡി ത്രൂ' പോർട്ടും ഒരു അധിക പോർട്ടും കാണിക്കണം. അങ്ങനെയാണെങ്കിൽ, എല്ലാം ശരിയാണ്. *ശ്രദ്ധിക്കുക: മിഡോയിൽ, ഒറ്റ ഉദ്ധരണികളിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന മുഴുവൻ സ്ട്രിംഗുമാണ് പോർട്ട് നാമം, എന്നാൽ കോളണിന് മുമ്പുള്ള സ്ട്രിംഗിലേക്ക് പേര് ചുരുക്കാൻ സാധിക്കും. ഈ മെഷീനിൽ, സ്ട്രിംഗ്: 'f_midi:f_midi 16:0'. ഉദാample, ഈ രണ്ട് കമാൻഡുകളും തുല്യമാണ്
പിഗ്പിയോ
GPIO പിൻകളുമായി ഇന്റർഫേസ് ചെയ്യാൻ ഞങ്ങൾ പിഗ്പിയോ ലൈബ്രറി ഉപയോഗിക്കുന്നു. പൈയുടെ ഹാർഡ്വെയറുമായി (RPi.GPIO) ഇന്റർഫേസ് ചെയ്യുന്ന സ്റ്റാൻഡേർഡ് രീതിയേക്കാൾ ഈ ലൈബ്രറി കൂടുതൽ സ്ഥിരതയുള്ളതും വഴക്കമുള്ളതുമാണെന്ന് ഞങ്ങൾ കണ്ടെത്തി. നിങ്ങൾക്ക് മറ്റൊരു ലൈബ്രറി ഉപയോഗിക്കാൻ താൽപ്പര്യമുണ്ടെങ്കിൽ, അതിനനുസരിച്ച് കോഡ് എഡിറ്റ് ചെയ്യുക. Pigpio ലൈബ്രറി ഇൻസ്റ്റാൾ ചെയ്യാൻ, ഇവിടെയുള്ള നിർദ്ദേശങ്ങൾ പാലിക്കുക: http://abyz.me.uk/rpi/pigpio/download.html മുന്പ് എല്ലാ മുൻampതാഴെ, ചെയ്തില്ലെങ്കിൽ നിങ്ങൾ പിഗ്പിയോ സേവനം ആരംഭിക്കണം:
പൈത്തൺ എക്സ്ampലെസ്
മുൻampരണ്ട് ശ്രേണികൾക്കിടയിൽ മാപ്പ് ചെയ്യുന്നതിനുള്ള എളുപ്പവഴിയായി les numpy ലൈബ്രറിയുടെ ഇന്റർപ് ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നു. ഡാറ്റ അയയ്ക്കാനും സ്വീകരിക്കാനും ഞങ്ങൾ റീപ്പർ ഉപയോഗിച്ചു. റീപ്പറിന്റെ മുൻഗണനാ മെനുവിൽ ഒരു ഹാർഡ്വെയർ MIDI ഔട്ട്പുട്ടായി Pi കോൺഫിഗർ ചെയ്തിരിക്കുന്നു.
നോട്ട് ഡാറ്റ ഉപയോഗിച്ച് GPIO നിയന്ത്രിക്കുക (ഉദാample_1_key_press.py) ഇത് മുൻampഎങ്ങനെ ചെയ്യണമെന്ന് le കാണിക്കുന്നു:
- ലളിതമായ ഒരു വ്യവസ്ഥ ഉപയോഗിച്ച് 3 നിർദ്ദിഷ്ട നോട്ട്-ഓൺ, നോട്ട്-ഓഫ് ഇവന്റുകൾ ശ്രദ്ധിക്കുക
- പൈയിലേക്ക് നോൺ-നോട്ട് ഡാറ്റ അയയ്ക്കുമ്പോൾ ഉണ്ടാകുന്ന ഒഴിവാക്കലുകൾ കണ്ടെത്തുക (ഉദാഹരണത്തിന് ഒരു സീക്വൻസറിൽ നിന്നുള്ള ട്രാൻസ്പോർട്ട് ഡാറ്റ)
- ഔട്ട്പുട്ട് പിന്നിന്റെ PWM-ലേക്ക് നോട്ട് വേഗത മാപ്പ് ചെയ്യുക
പ്രസക്തമായ ലൈബ്രറികൾ ഇറക്കുമതി ചെയ്യുക, പിഗ്പിയോ ലൈബ്രറിയിൽ നിന്ന് പൈ ഒബ്ജക്റ്റ് സൃഷ്ടിക്കുക, ഔട്ട്പുട്ട് പോർട്ട് തുറക്കുക: അയയ്ക്കുന്ന മറ്റ് തരത്തിലുള്ള MIDI ഡാറ്റയിൽ നിന്ന് (ഉദാ: ഗതാഗത നിയന്ത്രണങ്ങൾ മുതലായവ) ഉണ്ടാകുന്ന പിശകുകൾ കണ്ടെത്താനാണ് ശ്രമിക്കുക/ക്യാച്ച് ബ്ലോക്ക്. സത്യമായിരിക്കുമ്പോൾ: ശ്രമിക്കുക: #ഇത് port.iter_pending(): # ഒരു സന്ദേശം തീർച്ചപ്പെടുത്തിയിട്ടില്ലെങ്കിൽ (msg.type == 'note_on') msg-നുള്ള എല്ലാ നോൺ-നോട്ട് ഡാറ്റയും ഫിൽട്ടർ ചെയ്യുന്നു: # അത് നോട്ട് ഓൺ സന്ദേശമാണെങ്കിൽ = interp(msg.velocity, [0,127],[0,255]) # സ്കെയിൽ വേഗത 0-127 മുതൽ 0-255 വരെ #നമ്പർ പ്രകാരം ഡാറ്റ ഫിൽട്ടർ ചെയ്യുക, 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: # സന്ദേശം നോട്ട് ഓണല്ലെങ്കിൽ (ഉദാ നോട്ട് ഓഫ്) 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) പിശകായി: പ്രിന്റ് (“പിശക് ഒഴിവാക്കി”) പാസ്
മോഡും പിച്ച് വീലുകളും ഉപയോഗിച്ച് GPIO നിയന്ത്രിക്കുക (ഉദാample_2_wheels.py)
ഈ മുൻampഎങ്ങനെ ചെയ്യണമെന്ന് le കാണിക്കുന്നു:
- പിച്ച്, മോഡ് ഡാറ്റ എന്നിവ ശ്രദ്ധിക്കുകയും തരം അനുസരിച്ച് ഫിൽട്ടർ ചെയ്യുക
- ഔട്ട്പുട്ട് പിന്നിന്റെ PWM-ലേക്ക് ഡാറ്റ മാപ്പ് ചെയ്യുക
ഈ മുൻample മുകളിൽ പറഞ്ഞതിന് സമാനമാണ്, ഈ സന്ദേശ തരങ്ങൾ:
- msg.pitch മൂല്യമുള്ള പിച്ച് വീൽ തരം പിച്ച് വീൽ ആണ്
- msg.control = 1 (CC നമ്പർ) എന്നതിന്റെ നിയന്ത്രണ പാരാമീറ്ററും msg.value മൂല്യവും ഉള്ള ഒരു തുടർച്ചയായ കൺട്രോളർ തരം control_change ആണ് മോഡ് വീൽ.
ഒരു GPIO ഇവന്റിൽ നിന്നുള്ള MIDI ഡാറ്റ ഔട്ട്പുട്ട് ചെയ്യുക (gpio_event.py)
ഈ മുൻampഎങ്ങനെ ചെയ്യണമെന്ന് le കാണിക്കുന്നു:
- ഒരു ബട്ടൺ അമർത്തുന്നത് കണ്ടെത്താൻ ഒരു തടസ്സം ഉപയോഗിക്കുക
- പൈയിൽ നിന്ന് മറ്റൊരു ഉപകരണത്തിലേക്ക് MIDI ഡാറ്റ അയയ്ക്കുക
ഔട്ട്പുട്ട് പോർട്ട് തുറന്ന് രണ്ട് സന്ദേശങ്ങൾ സൃഷ്ടിച്ച് GPIO പിൻ ഒരു ഇൻപുട്ടായി സജ്ജീകരിക്കുക. ഈ മുൻampപിൻ 21-ൽ ബന്ധിപ്പിച്ചിരിക്കുന്ന ഒരു ബട്ടൺ ഉണ്ടെന്ന് le അനുമാനിക്കുന്നു, അതിനാൽ ബട്ടൺ അമർത്തുമ്പോൾ പിൻ ഉയരത്തിൽ പോകുന്നു: ബട്ടൺ അമർത്തുമ്പോഴോ റിലീസ് ചെയ്യുമ്പോഴോ വിളിക്കപ്പെടുന്ന കോൾബാക്ക് ഫംഗ്ഷനുകൾ ഇവയാണ്. ഔട്ട്പുട്ട് പോർട്ടുകൾ send() ഫംഗ്ഷൻ പോർട്ടിന് പുറത്തേക്ക് സന്ദേശം അയയ്ക്കുന്നു: കോൾബാക്ക് ശ്രോതാക്കൾ പശ്ചാത്തലത്തിൽ പ്രവർത്തിക്കുന്നു, കൂടുതൽ ശ്രദ്ധ ആവശ്യമില്ല:
ഒരു MIDI പ്ലേബാക്ക് File
ഈ മുൻampഎങ്ങനെ ചെയ്യണമെന്ന് le കാണിക്കുന്നു:
- ഒരു MIDI ലോഡ് ചെയ്യുക file പ്രോഗ്രാമിംഗ് പരിതസ്ഥിതിയിൽ
- പ്ലേബാക്ക് ദി file .
ഈ മുൻampനിങ്ങൾക്ക് ഒരു MIDI ഉണ്ടെന്ന് ലെസ് അനുമാനിക്കുന്നു file മിഡി_ എന്ന് വിളിക്കുന്നുfile.നിങ്ങളുടെ പൈത്തൺ സ്ക്രിപ്റ്റിന്റെ അതേ ഡയറക്ടറിയിൽ: മിഡോ ഇമ്പോർട്ട് മിഡിയിൽ നിന്ന് മിഡോ ഇറക്കുമതി ചെയ്യുകFile മിഡോ ഇറക്കുമതിയിൽ നിന്ന് MetaMessage പോർട്ട് = mido.open_output('f_midi') mid = MidiFile('മിഡി_file.mid') while True: മിഡിയിലെ സന്ദേശത്തിന്File('മിഡി_file.mid').play(): port.send(msg)
പ്രമാണങ്ങൾ / വിഭവങ്ങൾ
![]() |
റാസ്ബെറി പൈ ഒഎസ്എ മിഡി ബോർഡ് [pdf] ഉപയോക്തൃ മാനുവൽ OSA MIDI, ബോർഡ് |