Arduino로 나만의 MIDI 컨트롤러 만들기

MIDI

음악 애호가이거나 직접 아마추어 또는 전문 음악가라면 집에 많은 악기 컬렉션을 축적했을 것입니다. 이 모든 믹스를 완벽하게 만들려면 MIDI 컨트롤러. 안타깝게도 이러한 유형의 개체는 일반적으로 매우 비싸기 때문에 리소스가 너무 많지 않은 사람은 제공 할 수있는 모든 항목에 액세스하기가 어렵습니다.

MIDI 컨트롤러가 무엇인지 훨씬 더 잘 이해하려면 MIDI라는 단어가 악기 디지털 인터페이스즉, 전자 음악 장치가 서로 통신 할 수 있도록하는 일종의 컨트롤러입니다. 예를 들어 집에 전자 키보드가있는 경우 MIDI 인터페이스가있을 가능성이 높습니다. 계속 진행하기 전에, 다른 사람으로 하여금 믿게 만들 수있는 특정 기술적 세부 사항이 있음에도 불구하고 MIDI는 오디오가 아닙니다..

이 간단한 튜토리얼로 나만의 MIDI 컨트롤러 만들기

이것에 대해 명확하게 이해하면 MIDI가 단지 간단하다는 것을 이해하는 것이 훨씬 쉬울 것입니다. 최대 16 개의 독립 채널을 지원할 수있는 명령어 세트즉, 서로 독립적으로 통신하는 최대 16 개의 서로 다른 장치가있을 수 있습니다. 이러한 장치는 기본적으로 커넥터 내부에 5 개의 핀이있는 케이블 인 5 핀 DIN 케이블을 통해 연결되어야합니다. 세부적으로는 XNUMX 핀 DIN 대신 USB를 사용하는 것이 일반적입니다. USB를 사용하는 경우 USB-MIDI 인터페이스를 만들어야합니다.

더 이상 고민하지 않고, 나는 당신이 찾을 수있는 링크를 남깁니다. 지도 시간 단계적으로 많은 설명 이미지 우리 자신의 MIDI 컨트롤러를 만드는 데 필요한 모든 작업을 수행 할 수 있습니다.

관련 기사 :
Raspberry Pi에서 Pi 사용자 이름 및 비밀번호를 변경하는 방법

Arduino로 나만의 MIDI 컨트롤러를 만드는 방법

미디 커넥터

많은 사람들이 개인적으로나 직업적으로 서로 다른 이유로 완전 맞춤형 MIDI 컨트롤러 예를 들어 아티스트로서 인생의 어느 시점에서 저렴한 MIDI 컨트롤러를 구입하면 기대치 나 요구 사항을 충족하지 못할 수 있지만, 때가되면 전문가 용 버전을 선택하는 것은 재정적 인 측면에서 과도 할 수 있습니다. 제공 할 수있는 많은 기능뿐만 아니라 필요합니다.

이로 인해 오늘은 필요한 모든 것을 보여 드리고 자신 만의 MIDI 컨트롤러를 만들어 구성에 필요한 모든 것을 표시하고 설치에 필요한 소프트웨어를 제공합니다. 세부적으로이 프로젝트에서는 Arduino 보드의 사용이 필수적이며,이 작업을 수행 할 수있을만큼 강력한 컨트롤러입니다.

로봇을 만드는 방법
관련 기사 :
로봇을 만드는 방법 : 3 가지 옵션

MIDI 컨트롤러 란 무엇입니까?

MIDI

기본적으로 MIDI 컨트롤러는 서로 다른 음악 장치를 서로 연결하는 역할을합니다. 많은 사람들이 MIDI 인터페이스를 통합하는 악기이지만, 종종 혼동하는 사용자가 많기 때문에 매우 명확해야합니다. MIDI는 오디오 파일이 아니라 악기가 수신 할 수있는 매우 간단한 명령 세트입니다. 또는 사운드 설정.

MIDI 내부 두 가지 유형이 있습니다한편으로는 컨트롤러 번호와 0에서 127 사이의 값이있는 Change Control이라는 이름이 있습니다. 덕분에 볼륨이나 톤과 같은 다른 매개 변수를 변경할 수있는 메시지가 발행 될 수 있습니다. MIDI를 허용하는 다른 악기는 기본적으로 설정되는 채널과 메시지와 변경 방법을 설명하는 설명서를 가져와야합니다.

두 번째로 우리는 변경 제어를 구성하는 것보다 훨씬 간단한 일련의 메시지 인 프로그램 변경을 가지고 있습니다. 이러한 유형의 메시지는 장치의 사전 설정 또는 패치를 변경하는 데 사용됩니다. 변경 제어에서와 같이 제조업체는 특정 메시지에 의해 변경된 사전 설정을 나타내는 설명서를 장비와 함께 포함해야합니다.

나만의 수제 MIDI 컨트롤러를 만드는 데 필요한 부품

미디 커넥터 회로도

나만의 MIDI 컨트롤러를 만들려면 이미 언급했듯이 Arduino 보드 외에도 일련의 부품이 필요합니다. 계속하기 전에, 앞으로 프로젝트를 확장하고 싶기 때문에 더 많은 것이 필요하지만, 지금은 몇 개만 있으면 충분할 것입니다.

5 극 암 DIN 케이블, 2ohm 저항기 220 개, 순간 스위치 2 개, 2kohm 저항기 10 개, 연결 와이어, 회로 기판, MIDI 케이블 및 MIDI 장치 또는 USB 인터페이스가 필요합니다. 이 부분만으로도 내 단계에 따라 자신 만의 MIDI 컨트롤러를 만들 수 있습니다.

첫 단계

Arduino 미디 회로도

시작하기 전에 MIDI 케이블의 핀을 볼 수있는 그림을 남겨 둡니다. 이렇게하면 핀과 특히 각 핀을 연결할 위치를 정확하게 식별 할 수 있습니다. 일반적으로이 시점에서해야 할 일은 케이블의 5 번 핀을 220ohm 저항에 연결하고 거기에서 Arduino Transmit 1, 핀 4를 220ohm 저항에 연결하고 거기에서 Arduino의 5V 소켓으로 연결하는 것입니다. 2는 컨트롤러의 접지 연결에 연결되어야합니다.

이 단계가 완료되면이 선 바로 아래에있는 사진에 자세한 다이어그램이 없습니다. 버튼을 연결할 때입니다. 이 섹션의 아이디어는 digitalRead 핀 (도달되는 전압이 변할 때 감지 할 수 있음)을 사용하여 버튼을 눌러 달성 할 트랜지스터를 사용할 수 있도록하는 것입니다. 이를 위해 우리는 버튼을 사용하기 만하면됩니다. 왼쪽은 5V에 연결하고 오른쪽은 220ohm 저항에 연결하고 거기에서 접지까지 연결하고 오른쪽은 핀 6에 연결합니다. 두 번째 버튼은 동일한 방식으로 설치되지만 다이어그램에서 볼 수 있듯이 6 번 핀 대신 7 번에 연결합니다.

가정용 미디 컨트롤러에 사용할 소프트웨어

모든 하드웨어를 마쳤 으면 이제 계측기를 연결하고 테스트 할 차례입니다. 그 전에 우리는 USB-MIDI 인터페이스 및 MIDI 케이블 데이터를 보내는 보드를 컴퓨터와 연결합니다. 이를 달성하기 위해 우리는 Arduino에 설치하고 프로젝트에 포함해야하는 Forty Seven Effects의 사람들이 만든 MIDI v4.2 라이브러리를 선택했습니다.

컴퓨터의 경우 Arduino에서 들어오는 모든 MIDI 데이터를 감독 할 수있는 프로그램이 필요합니다. 이를 위해 MIDI Monitor (OS X), MIDI-OX (Windows) 또는 Kmidimon (Linux)과 같은 다양한 가능성이 있습니다.

약간의 테스트를 수행하려면 Arduino를 컴퓨터에 연결하고 다음 코드를 실행하기 만하면됩니다.

#include
#include
#include
#include
#include

MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // crear objeto de salida MIDI llamado midiOut

void setup() {
Serial.begin(31250); // configuracion de serial para MIDI
}

void loop() {
midiOut.sendControlChange(56,127,1); // envío de señal MIDI CC -- 56 = nota, 127 = velocidad, 1 = canal
delay(1000); // retraso
midiOut.sendProgramChange(12,1); // envío de una señal MIDI PC -- 12 = valor, 1 = canal
delay(1000); // retraso de 1 segundo
}

모든 것이 잘되면 버튼 테스트로 이동할 수 있습니다.이 테스트가 효과가없는 경우 모든 연결이 올바른지 확인해야합니다. 회로는 이전 다이어그램과 정확히 일치합니다. MIDI 케이블로 USB-MIDI 인터페이스에 연결, MIDI 포트 케이블이 올바르게 연결되고 MIDI 케이블이 USB-MIDI 인터페이스의 입력에 연결되고 Arduino 보드가 전기 네트워크에 올바르게 연결되었으며 충분한 전력이 있습니다 ...

버튼이 올바르게 작동하는지 테스트

계속해서 프로그램에 새로운 기능과 코드를 제공하기 전에 잠시 멈출 가치가 있습니다. 버튼이 제대로 작동하는지 테스트. 이를 위해 다음 코드를로드해야합니다.

const int boton1 = 6; // asignacion del boton a una variable
const int boton2 = 7; // asignacion del boton a una variable

void setup() {
Serial.begin(9600); // configuracion del serial
pinMode(boton1,INPUT); // configuracion del boton1 como entrada
pinMode(boton2,INPUT); // configuracion del boton2 como entrada
}

void loop() {

if(digitalRead(boton1) == HIGH) { // prueba de estado del boton1
delay(10); // retraso
if(digitalRead(boton1) == HIGH) { // prueba de estado de nuevo
Serial.println("Boton 1 funciona correctamente!"); // log
delay(250);
}
}

if(digitalRead(boton2) == HIGH) { // prueba de boton 2
delay(10); // retraso
if(digitalRead(boton2) == HIGH) { // prueba de estado de nuevo
Serial.println("Boton 2 funciona correctamente!"); // log
delay(250);
}
}

}

이 코드는 USB 케이블이 연결된 상태에서 버튼을 눌렀는지 여부를 알려주도록 컴파일하고 실행하기 만하면됩니다.

우리는 수제 MIDI 컨트롤러를 만듭니다.

이러한 테스트를 실행 한 후에는이를 위해 자체 MIDI 컨트롤러를 조립할 시간입니다. 다음 코드 만 컴파일하면됩니다.

#include
#include
#include
#include
#include

const int boton1 = 6; // asignamos boton a la variable
const int boton2 = 7; // asignamos boton a la variable

MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut

void setup() {
pinMode(boton1,INPUT); // configuracion del boton1 como una entrada
pinMode(boton2,INPUT); // configuracion del boton2 como una entrada
Serial.begin(31250); // configuracion MIDI de salida
}

void loop() {
if(digitalRead(buttonOne) == HIGH) { // comprobacion de estado
delay(10); // retraso
if(digitalRead(buttonOne) == HIGH) { // comprobacion de estado de nuevo
midiOut.sendControlChange(56,127,1); // envío un MIDI CC -- 56 = nota, 127 = velocidad, 1 = canal
delay(250);
}
}

if(digitalRead(buttonTwo) == HIGH) { // comprobacion de estado
delay(10); // retraso
if(digitalRead(buttonTwo) == HIGH) { // nueva comprobacion de estado
midiOut.sendControlChange(42,127,1); // envío un MIDI CC -- 42 = nota, 127 = velocidad, 1 = canal
delay(250);
}
}
}

세부 사항으로, 이번에는 MIDI 출력과 함께 Serial.println () 명령을 사용할 수 없다고 말하고, 컴퓨터에 어떤 유형의 메시지를 표시하려면 다음과 같이 변경하십시오.

midiOut.sendControlChange(42,127,1);

기준 :

midiOut.sendControlChange(value, channel);

여기서 값과 채널에는 표시하려는 원하는 값이 있어야합니다.

작동 예 :


4 코멘트, 당신의 것을 남겨주세요

코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   알프레드

    Arduino는 스스로 프로젝트를 수행 할 수있는 많은 가능성을 제공합니다. https://www.juguetronica.com/arduino . 가장 좋은 점 중 하나는 전문가가 아니어도 시작하여 계속해서 배워서 독학 할 수 있도록 동기를 부여 할 수 있다는 것입니다.

  2.   다넬로만

    인사말.

    이 환상적인 튜토리얼을 수행하려고하는데 #includes가 완전하지 않습니다….

    어떤 것이 필요한지 말씀해 주시겠습니까?

    정말 감사합니다.

  3.   우엘

    안녕하세요.
    버튼을 압전 신호가 도착할 잭 입력으로 교체하여 전자 드럼 모듈을 만들고 싶습니다.
    가능할까요?

  4.   에두아르도 발렌수엘라

    이 코드를 포함 해 주시면이 프로젝트에 관심이 있습니다.