Raspberry-Pi-OSA-MIDI-보드-로고

라즈베리 파이 OSA MIDI 보드

Raspberry-Pi-OSA-MIDI-보드-제품

MIDI용 라즈베리 파이 설정

이 가이드는 새로 설치된 Raspberry Pi를 OS에서 검색 가능한 MIDI I/O 장치로 작동시키는 방법을 보여줍니다. 그것은 또한 일부 전을 제공합니다amp프로그래밍 환경 안팎으로 MIDI 데이터를 가져오기 위해 다양한 Python 라이브러리를 사용하는 것입니다. 업데이트 – 11년 2021월 XNUMX일.: 이 가이드는 최신 Raspberry Pi OS 버전의 일부 문제를 해결하기 위해 업데이트되었습니다. 사전 설치된 스크립트와 여기에서 완전히 구성된 전체 이미지를 다운로드할 수도 있습니다.

우리에게 필요한 것

  • 라즈베리 파이 A+/B+/2/3B/3B+/4B
  • 라즈베리 파이용 MIDI 보드
  • MicroSD 카드•나일론 M4 나사 2.5개 세트
  • 4개의 나일론 M2.5*11mm 암-암 스탠드오프 세트
  • 4개의 나일론 M2.5*5mm 남성 대 여성 스탠드오프 세트

집회

나일론 나사와 스탠드오프를 사용하여 아래 이미지와 같이 MIDI 보드와 함께 Raspberry Pi를 조립합니다.

Raspberry-Pi-OSA-MIDI-보드-1

첫 번째 설정

우리는 모든 ex를 테스트했습니다.ampRasperry Pi OS, 버전 4년 2020월을 사용하는 Pi XNUMXB에서 이 문서의 파일). 처음에는 화면과 키보드를 사용하여 Pi를 설정해야 합니다. 그런 다음 선택한 방법을 사용하여 Pi의 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가 자동으로 네트워크에 연결되도록 네트워크 보안 설정을 Pi에 추가하는 것도 좋은 생각입니다. https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md

Pi Up을 USB OTG 가젯으로 설정
Pi에서 터미널을 열고 다음 절차를 따르십시오.

  • USB 드라이버를 dwc2로 설정
    echo "dtoverlay=dwc2" | sudo 티 -a /boot/config.txt
  • dwc2 드라이버 활성화
    에코 "dwc2" | sudo 티 -a /etc/modules
  • lib 복합 드라이버 활성화
    echo "lib 합성" | sudo 티 -a /etc/modules
  • MIDI 가젯 활성화 
    에코 "g_midi" | sudo 티 -a /etc/modules

구성 스크립트를 만듭니다.

  • 생성하다 file
    sudo 터치 /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 # 다기능 복합 가젯 echo 0x0100 > USB bcdpdir /USB bcdDevice # v1.0.0 echo0 # 문자열 0200x2 echo “fedcba0” > strings/409x9876543210/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 Nano를 종료하고 저장합니다. file 파이를 재부팅하십시오. sudo reboot 사용 가능한 MIDI 포트를 나열합니다. midi -l MIDI가 올바르게 구성된 경우 마지막 명령은 다음과 유사한 결과를 출력해야 합니다. Dir Device Name 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 모든 ex를 실행하기 전에amp아래 파일에서 완료되지 않은 경우 pigpio 서비스를 시작해야 합니다.

파이썬 예amp레

전직amples는 또한 numpy 라이브러리의 interp 기능을 사용하여 두 범위를 쉽게 매핑할 수 있습니다. 우리는 데이터를 보내고 받기 위해 Reaper를 사용했습니다. Pi는 Reaper의 기본 설정 메뉴에서 하드웨어 MIDI 출력으로 구성됩니다.

참고 데이터로 GPIO 제어(예:ample_1_key_press.py) 이 전ample는 다음을 수행하는 방법을 보여줍니다.

  • 간단한 조건을 사용하여 3개의 특정 음표 켜기 및 음표 끄기 이벤트 듣기
  • 노트가 아닌 데이터가 Pi로 전송될 때 발생하는 예외를 포착합니다(예: 시퀀서에서 데이터 전송)
  • 노트 속도를 출력 핀의 PWM에 매핑

관련 라이브러리를 가져오고 pigpio 라이브러리에서 pi 개체를 만들고 출력 포트를 엽니다. try/catch 블록은 전송되는 다른 유형의 MIDI 데이터(예: 전송 컨트롤 등)에서 발생하는 오류를 포착하는 것입니다. while True: try: # 이것은 port.iter_pending()에서 msg에 대한 모든 비노트 데이터를 필터링합니다. # 보류 중인 메시지가 있는 경우 if(msg.type == 'note_on'): # Note On 메시지 출력 = 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: # 메시지가 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 제외: print("오류 예외") 통과

Mod 및 Pitch Wheels로 GPIO 제어(예:ample_2_wheels.py)
이 전ample는 다음을 수행하는 방법을 보여줍니다.

  • Pitch 및 Mod Data를 듣고 유형별로 필터링
  • 데이터를 출력 핀의 PWM에 매핑

이 전ample은 다음과 같은 메시지 유형이 있는 위와 유사합니다.

  • 피치 휠은 msg.pitch 값을 가진 유형의 피치휠입니다.
  • Mod Wheel은 제어 매개변수가 msg.control = 1(CC 번호)이고 값이 msg.value인 연속 컨트롤러 유형 control_change입니다.

GPIO 이벤트(gpio_event.py)에서 MIDI 데이터 출력

이 전ample는 다음을 수행하는 방법을 보여줍니다.

  • 인터럽트를 사용하여 버튼 누름 감지
  • Pi에서 다른 장치로 MIDI 데이터 보내기

출력 포트를 열고 두 개의 메시지를 생성하고 GPIO 핀을 입력으로 설정합니다. 이 전ample는 핀 21에 연결된 버튼이 있다고 가정하므로 버튼을 눌렀을 때 핀이 HIGH가 됩니다. 다음은 버튼을 눌렀거나 놓을 때 호출되는 콜백 함수입니다. 출력 포트 send() 함수는 단순히 포트 밖으로 메시지를 보냅니다. 콜백 수신기는 백그라운드에서 실행되며 더 이상 주의할 필요가 없습니다.

MIDI 재생 File

이 전ample는 다음을 수행하는 방법을 보여줍니다.

  • MIDI 불러오기 file 프로그래밍 환경에서
  • 재생 file .

이 전amples는 MIDI가 있다고 가정합니다. file 미디라고 불리는file.mid는 파이썬 스크립트와 같은 디렉토리에 있습니다: import mido from mido import MidiFile mido에서 가져오기 MetaMessage 포트 = mido.open_output('f_midi') mid = MidiFile('미디_file.mid') 동안 True: Midi의 msg용File('미디_file.mid').play(): port.send(msg)

문서 / 리소스

라즈베리 파이 OSA MIDI 보드 [PDF 파일] 사용자 매뉴얼
OSA 미디, 보드

참고문헌

댓글을 남겨주세요

이메일 주소는 공개되지 않습니다. 필수 항목은 표시되어 있습니다. *