บอร์ด Raspberry Pi OSA MIDI

การตั้งค่า Raspberry Pi สำหรับ MIDI
คู่มือนี้จะแสดงวิธีใช้ Raspberry Pi ที่ติดตั้งใหม่และใช้งานเป็นอุปกรณ์ MIDI I/O ที่สามารถค้นพบระบบปฏิบัติการได้ นอกจากนี้ยังจะให้ตัวอย่างบางส่วนampการใช้ไลบรารี Python ต่างๆ เพื่อส่งข้อมูล MIDI เข้าและออกจากสภาพแวดล้อมการเขียนโปรแกรม อัปเดต – 11 กันยายน 2021: คู่มือนี้ได้รับการอัปเดตเพื่อแก้ไขปัญหาบางอย่างเกี่ยวกับระบบปฏิบัติการ Raspberry Pi เวอร์ชันล่าสุด คุณยังสามารถดาวน์โหลดอิมเมจเต็มพร้อมสคริปต์ที่ติดตั้งไว้ล่วงหน้าและกำหนดค่าอย่างสมบูรณ์ได้ที่นี่
สิ่งที่เราต้องการ
- ราสเบอร์รี่ Pi A+/B+/2/3B/3B+/4B
- บอร์ด MIDI สำหรับ Raspberry Pi
- การ์ด MicroSD•ชุดสกรูไนลอน M4 จำนวน 2.5 ตัว
- ชุดไนลอน M4 * 2.5 มม. ตัวเมียถึงตัวเมีย 11 ตัว
- ชุดไนลอน M4 * 2.5 มม. Standoffs ชายและหญิง 5 ชุด
การประกอบ
ใช้สกรูไนลอนและสแตนด์ออฟเพื่อประกอบ Raspberry Pi ร่วมกับบอร์ด MIDI ดังที่แสดงในภาพด้านล่าง:

การตั้งค่าครั้งแรก
เราทดสอบอดีตทั้งหมดampในเอกสารนี้บน Pi 4B โดยใช้ Rasperry Pi OS เวอร์ชันเดือนพฤษภาคม 2020) ในครั้งแรกจำเป็นต้องใช้หน้าจอและคีย์บอร์ดในการตั้งค่า Pi up หลังจากนั้นให้ใช้วิธีการที่คุณเลือกเพื่อเข้าถึงระบบปฏิบัติการของ Pi ทุกขั้นตอนมีผลบังคับใช้เว้นแต่จะระบุไว้เป็นอย่างอื่น
การติดตั้ง
อัปเดต/อัปเกรด
ดำเนินการอัปเดตและอัปเกรดตามที่อธิบายไว้ที่นี่: https://www.raspberrypi.org/documentation/raspbian/updating.md
การกำหนดค่าเครือข่าย (ไม่บังคับ)
หากคุณกำลังใช้ SSH จากเครื่องอื่นไปยัง Pi มันจะคุ้มค่าที่จะให้ที่อยู่ IP คงที่แก่ Pi: 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
สะท้อน “dtoverlay=dwc2” | sudo tee -a /boot/config.txt - เปิดใช้งานไดรเวอร์ dwc2
สะท้อน “dwc2” | sudo tee -a /etc/modules - เปิดใช้งานไดรเวอร์คอมโพสิต lib
echo “lib คอมโพสิต” | sudo tee -a /etc/modules - เปิดใช้งานอุปกรณ์ MIDI
สะท้อน “g_midi” | sudo tee -a /etc/modules
สร้างสคริปต์การกำหนดค่า:
- สร้าง file
sudo touch /usr/bin/midi_over_usb - ทำให้เป็นปฏิบัติการได้
sudo chmod +x /usr/bin/midi_over_usb - แก้ไขด้วยนาโน
sudo นาโน /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 # Gadget คอมโพสิตมัลติฟังก์ชั่น 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 ออกจาก Nano และบันทึก file (Ctrl+X, Y, กลับ) เพิ่มการเรียกสคริปต์ไปที่ rc.local เพื่อให้สคริปต์ดำเนินการทุกครั้งที่เริ่มต้นระบบ sudo nano /etc/rc.local เพิ่มบรรทัดต่อไปนี้ก่อน "exit0" /usr/bin/midi_over_usb Exit Nano และบันทึก file และรีบูต Pi sudo boot แสดงรายการพอร์ต MIDI ที่มีอยู่ amidi -l หากกำหนดค่า MIDI อย่างถูกต้อง คำสั่งสุดท้ายควรส่งออกสิ่งที่คล้ายกับ: ชื่ออุปกรณ์ Dir IO hw:0,0 f_midi IO hw:0,0 f_midi
ติดตั้งไลบรารี Python
ส่วนนี้จะอธิบายวิธีการติดตั้งไลบรารี่ที่เราต้องการสำหรับ Python 2.x
มิโด
Mido เป็นไลบรารี่ที่ใช้งานง่ายสำหรับจัดการข้อมูล MIDI มันอาศัยแบ็กเอนด์ rt-midi, ไลบรารี asound และ Jack ป้อนคำสั่งต่อไปนี้ตามลำดับ: เอาต์พุตควรแสดงพอร์ต 'Midi Through' หนึ่งพอร์ตและพอร์ตเพิ่มเติมหนึ่งพอร์ต หากเป็นกรณีนี้ทุกอย่างก็ดี *หมายเหตุ: ใน Mido ชื่อพอร์ตคือสตริงทั้งหมดที่อยู่ในเครื่องหมายคำพูดเดี่ยว แต่คุณสามารถตัดชื่อให้เป็นสตริงก่อนเครื่องหมายทวิภาคได้ บนเครื่องนี้ สตริงคือ: 'f_midi:f_midi 16:0' สำหรับเช่นample สองคำสั่งนี้เทียบเท่ากัน
พิกพิโอ
เราใช้ไลบรารี pigpio เพื่อเชื่อมต่อกับพิน GPIO เราพบว่าไลบรารีนี้มีความเสถียรและยืดหยุ่นมากกว่าวิธีมาตรฐานในการเชื่อมต่อกับฮาร์ดแวร์ของ Pi (RPi.GPIO) หากคุณต้องการใช้ไลบรารีอื่น ให้แก้ไขโค้ดตามนั้น หากต้องการติดตั้งไลบรารี pigpio ให้ทำตามคำแนะนำที่นี่: http://abyz.me.uk/rpi/pigpio/download.html ก่อนที่จะรันอดีตทั้งหมดampด้านล่างนี้ คุณควรเริ่มบริการ pigpio หากยังไม่เสร็จสิ้น:
ไพธอนampเลส
อดีตampนอกจากนี้ ยังใช้ฟังก์ชัน interp ของไลบรารี numpy เป็นวิธีง่ายๆ ในการจับคู่ระหว่างสองช่วง เราใช้ Reaper เพื่อส่งและรับข้อมูล Pi ได้รับการกำหนดค่าเป็นเอาต์พุต MIDI ของฮาร์ดแวร์ในเมนูการตั้งค่าของ Reaper
ควบคุม GPIO ด้วย Note Data (เช่นample_1_key_press.py) เช่นนี้ampเลอแสดงวิธีการ:
- ฟังเหตุการณ์การจดบันทึกและปิดการบันทึกเฉพาะ 3 รายการโดยใช้เงื่อนไขง่ายๆ
- จับข้อยกเว้นที่เกิดขึ้นเมื่อข้อมูลที่ไม่ใช่โน้ตถูกส่งไปยัง Pi (เช่น ข้อมูลการขนส่งจากซีเควนเซอร์)
- แมปความเร็วโน้ตกับ PWM ของพินเอาท์พุต
นำเข้าไลบรารีที่เกี่ยวข้อง สร้างวัตถุ pi จากไลบรารี pigpio และเปิดพอร์ตเอาต์พุต: บล็อก try/catch คือการตรวจจับข้อผิดพลาดที่เกิดขึ้นจากข้อมูล MIDI ประเภทอื่นที่ถูกส่ง (เช่น การควบคุมการขนส่ง เป็นต้น) ในขณะที่ True: ลอง: #This กรองข้อมูลที่ไม่ใช่บันทึกย่อทั้งหมดสำหรับ msg ใน port.iter_pending(): # หากมีข้อความที่ค้างอยู่ if(msg.type == 'note_on'): # ถ้าเป็น Note On ข้อความออก = interp(msg.velocity, [0,127],[0,255]) # สเกลความเร็วตั้งแต่ 0-127 ถึง 0-255 #filter ข้อมูลตามหมายเลขบันทึกย่อ 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: # ถ้าข้อความไม่ใช่ Note On (เช่น Note ปิด) 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 เป็นข้อผิดพลาด: พิมพ์ ("ยกเว้นข้อผิดพลาด") ผ่าน
ควบคุม GPIO ด้วย Mod และ Pitch Wheels (เช่นample_2_wheels.py)
อดีตนี้ampเลอแสดงวิธีการ:
- ฟังข้อมูล Pitch และ Mod แล้วกรองตามประเภท
- แมปข้อมูลกับ PWM ของพินเอาท์พุต
อดีตนี้ample คล้ายกับข้อความด้านบน โดยมีประเภทข้อความเหล่านี้:
- Pitch wheel คือประเภท pitchwheel ที่มีค่า msg.pitch
- Mod Wheel เป็นประเภทคอนโทรลเลอร์แบบต่อเนื่อง control_change พร้อมด้วยพารามิเตอร์ควบคุม msg.control = 1 (หมายเลข CC) และค่า msg.value
ส่งออกข้อมูล MIDI จากเหตุการณ์ GPIO (gpio_event.py)
อดีตนี้ampเลอแสดงวิธีการ:
- ใช้การขัดจังหวะเพื่อตรวจจับการกดปุ่ม
- ส่งข้อมูล MIDI จาก Pi ไปยังอุปกรณ์อื่น
เปิดพอร์ตเอาต์พุต สร้างข้อความสองข้อความ และตั้งค่าพิน GPIO เป็นอินพุต อดีตนี้ample ถือว่ามีปุ่มผูกอยู่กับพิน 21 ดังนั้นพินนั้นจะสูงเมื่อกดปุ่ม: ต่อไปนี้เป็นฟังก์ชันเรียกกลับที่ถูกเรียกเมื่อกดหรือปล่อยปุ่ม ฟังก์ชัน send() ของพอร์ตเอาต์พุตเพียงส่งข้อความออกจากพอร์ต: Listener การโทรกลับจะทำงานในเบื้องหลังและไม่ต้องการความสนใจอีกต่อไป:
เล่น MIDI File
อดีตนี้ampเลอแสดงวิธีการ:
- โหลด MIDI file ในสภาพแวดล้อมการเขียนโปรแกรม
- การเล่น file .
อดีตนี้ampถือว่าคุณมี MIDI file เรียกว่า midi_file.mid ในไดเร็กทอรีเดียวกับสคริปต์ python ของคุณ: import mido from mido import MidiFile จาก mido นำเข้า MetaMessage port = mido.open_output('f_midi') mid = MidiFile('มิดิ_file.mid') ในขณะที่ True: สำหรับ msg ใน MidiFile('มิดิ_file.mid').play(): port.send(msg)
เอกสาร / แหล่งข้อมูล
![]() |
บอร์ด Raspberry Pi OSA MIDI [พีดีเอฟ] คู่มือการใช้งาน OSA MIDI บอร์ด |




