MIDI 컨트롤러로 Processing 제어

9017 단어 processing미디
이번에는 MIDI 컨트롤러로 Processing의 값을 조작하는 방법을 메모합니다.
※MIDI란 음악에 특화한 통신 프로토콜의 일입니다. 벌써 30년 정도 계속되는 세계 공통 규격입니다.
알고 있는 사람 많을까.

KORG의 padKONTROL이라는 하드웨어 MIDI 컨트롤러와 Processing의 MIDI 라이브러리 "MidiBus"를 사용합니다.
padKONTROL은 낡은 컨트롤러로 중고로 5,000엔 정도로 살 수 버린다.


전회 기사로 한 VScode로 해 갑니다.
Processing을 Visual Studio Code로 이동하고 싶습니다.

1. MIDI 라이브러리 「MidiBus」의 도입



· 라이브러리는 공식 IDE에서 수행합니다.
우선은 「툴 추가」를 선택.


Libraries 태그에서 "MidiBus"를 설치합시다.


2.MIDI 디바이스의 특정



・다음에 코드를 이하와 같이 기술.

korgtest.pde
    import themidibus.*;

    // MidiBusインスタンス
    MidiBus myBus;

    void setup() {
        size(300, 300);
        background(255);
        //MIDIデバイスのリストを表示
        MidiBus.list();
        myBus = new MidiBus(this, 0, 0);
    }

    void draw(){
    }

이제 한 번 실행합니다. (Ctrl+Shift+B에서 빌드 작업 실행 [ 이전 기사 참고】 ]
그러면 PC에 연결된 MIDI 장치 목록이 콘솔에 표시됩니다.
INPUT, OUTPUT에서 각각 사용할 컨트롤러의 디바이스 No를 찾습니다.


이번 padKONTROL은 2가 input이므로 다음과 같이 편집합니다. (이번 output은 사용하지 않지만 일단 추가)

korgtest.pde
   //第2引数にinput,第3引数にoutputのデバイスNoを指定
   myBus = new MidiBus(this, 2, 5);    

3. 도형 그리기와 controllerChange 함수 구현



· 도형 그리기와 MidiBus 라이브러리의 controllerChange 함수를 구현합시다.

korgtest.pde
import themidibus.*;

MidiBus myBus;    // MidiBusインスタンス

void setup() {
    size(300, 300);    //ウインドウのサイズ
    background(255);   //ウインドウ背景の色

    MidiBus.list();                     //MIDIデバイスのリストを表示
    myBus = new MidiBus(this, 2, 5);    //MIDIデバイスのinput,outputを指定
}

float x = 150;    //図形の基準位置x
float y = 150;    //図形の基準位置y
int r = 180;      //図形の半径

void draw(){       
    background(255);        //背景塗りつぶし(図形を削除する目的)
    stroke(0, 0, 0);        //図形の描画線に色を付ける
    ellipse(x, y, r, r);    //円の描画(x座標, y座標, 幅, 高さ)
}

void controllerChange(int channel, int number, int value){

    if(number == 20){      
      x = map(value,0,127,0,width);
    }else{
      y = map(value,0,127,0,width);
    }

    //動かしたコントロールの値を表示
    println("channel:" + channel + " number:" + number +" value:"+ value);
}

해설

1.controllerChange 함수는 컨트롤의 값이 변경될 때 작동합니다. (글자의 만마)
2. 움직이는 노브의 값을 알기 위해 println으로 표시하여 컨트롤의 정보를 조사합시다. (이번 예에서는 20과 21을 사용합니다)
3. 코드는 「움직이는 컨트롤의 Number 값에 의해 도형의 묘화 위치를 변경한다」 일을 실시하고 있습니다.
4.map 함수는 【value의 범위 「0~127」을 「0~width(윈도우 폭 가득)」로 변환】 하고 있습니다.

할당된 padKontrol 의 컨트롤치 (number)


4.Processing 실행



이제 Processing을 실행하여 MIDI 컨트롤을 조작해 봅시다.
↓ 실제로 움직이고 있는 gif 동영상입니다.


꽤 쉽게 MIDI를 취급할 수 있었습니다.
원래는 minim 라이브러리에서 음악과 Processing을 동기화시키는 것을 즐겼습니다만,
「스스로도 실시간으로 움직이고 싶다」라고 하는 것으로 MidiBus 라이브러리의 존재를 깨달은 대로입니다.

하고 있는 일은 컨트롤러의 값을 도형의 요소(이번은 도형의 위치)에 할당하고 있을 뿐입니다만,
응용해 VJ라든지 여러가지 일을 할 수 있을 것 같네요.

좋은 웹페이지 즐겨찾기