Raspberry-Pi-OSA-MIDI-บอร์ด-โลโก้

บอร์ด Raspberry Pi OSA MIDI

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 ดังที่แสดงในภาพด้านล่าง:

Raspberry-Pi-OSA-MIDI-Board-1

การตั้งค่าครั้งแรก

เราทดสอบอดีตทั้งหมด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 บอร์ด

อ้างอิง

ฝากความคิดเห็น

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องกรอกข้อมูลมีเครื่องหมาย *