Arduinoで独自のMIDIコントローラーを作成する

MIDI

あなたが音楽愛好家であるか、直接アマチュアまたはプロのミュージシャンであるならば、確かにあなたの家には楽器の膨大なコレクションが蓄積されています。 これらすべてのミックスを完璧にするには、 MIDIコントローラー。 残念ながら、これらのタイプのオブジェクトは通常非常に高価であるため、リソースが多すぎない人は、提供できるすべてのものにアクセスするのが困難です。

MIDIコントローラーとは何かをよりよく理解するために、MIDIという言葉は 楽器デジタルインターフェースつまり、電子楽器を相互に通信させる一種のコントローラーです。 たとえば、自宅に電子キーボードがある場合は、MIDIインターフェイスを備えている可能性が高くなります。 前進を続ける前に、他のことを信じさせるかもしれない特定の技術的な詳細があるという事実にもかかわらず、それは非常に明確でなければなりません MIDIはオーディオではありません.

この簡単なチュートリアルで独自のMIDIコントローラーを作成する

これについて明確になったら、MIDIは単純なものであることを理解するのがはるかに簡単になります。 最大16の独立したチャネルをサポートできる命令セットこれは、最大16の異なるデバイスが互いに独立して通信できることを意味します。 これらのデバイスは、基本的にコネクタ内に5ピンのケーブルである5ピンDINケーブルを介して接続する必要があります。 詳細として、XNUMXピンDINの代わりにUSBを使用することは非常に一般的です。USBを使用する場合は、USB-MIDIインターフェイスを作成する必要があります。

それ以上の苦労なしに、私はあなたが見つけることができるリンクをあなたに残します チュートリアル たくさんのステップバイステップ 説明的な画像 ここで、独自のMIDIコントローラーを作成するために必要なすべてのアクションを実行できます。

関連記事
RaspberryPiでPiのユーザー名とパスワードを変更する方法

Arduinoで独自のMIDIコントローラーを作成する方法

MIDIコネクタ

多くの人々は、個人的および専門的の両方のさまざまな理由で、 フルカスタムMIDIコントローラー おそらく、そして例として、アーティストとしての人生のある時点で、安価なMIDIコントローラーを購入しても期待やニーズを満たせない可能性がありますが、時が来れば、両方の財源でプロフェッショナルバージョンを選択することは過剰になる可能性があります。必要性だけでなく、彼らが提供できる多数の機能。

このため、今日は、構築に必要なすべてを示し、インストールする必要のあるソフトウェアを提供する独自のMIDIコントローラーを作成できるように、必要なすべてを紹介したいと思います。 詳細として、このプロジェクトでは、Arduinoボードの使用が不可欠です。これは、このタスクを実行するのに十分強力なコントローラーです。

ロボットの作り方
関連記事
ロボットの作り方:3つの異なるオプション

MIDIコントローラーとは何ですか?

ミディ

基本的に、MIDIコントローラーは、大まかに言って、さまざまな音楽デバイスを相互に接続する役割を果たします。 多くはMIDIインターフェースを組み込んだ楽器ですが、混乱することが多いユーザーが多いため、これは非常に明確である必要があります。MIDIはオーディオファイルではなく、楽器が受信できる非常に単純な一連の命令です。またはサウンド設定。

MIDIの内部 XNUMXつの異なるタイプがあります一方では、変更管理と呼ばれるものがあり、コントローラー番号と0〜127の値があります。これにより、音量やトーンなどのさまざまなパラメーターを変更できるメッセージを発行できます。 MIDIを受け入れるさまざまな楽器は、デフォルトで設定されているチャンネルとメッセージとそれらを変更する方法を説明するマニュアルを持参する必要があります。

次に、プログラム変更があります。これは、変更管理を構成するメッセージよりもはるかに単純な一連のメッセージです。 これらのタイプのメッセージは、デバイスのプリセットまたはパッチを変更するために使用されます。 変更管理と同様に、製造業者は、特定のメッセージによってどのプリセットが変更されるかを示すマニュアルを機器とともに含める必要があります。

独自の自家製MIDIコントローラーを構築するために必要な部品

MIDIコネクタの回路図

独自のMIDIコントローラーを構築できるようにするには、すでに述べたように、Arduinoボードに一連の部品を追加する必要があります。 続行する前に、おそらく将来、プロジェクトを拡張したいので、もっと多くのものが必要になることを伝えてください。ただし、現時点では、いくつかのピースがあれば十分です。

5極のメスDINケーブル、2つの220オーム抵抗、2つのモーメンタリスイッチ、2つの10kオーム抵抗、接続ワイヤ、回路基板、MIDIケーブル、およびMIDIデバイスまたはUSBインターフェイスが必要になります。 これらのピースだけで、私の手順に従って、独自のMIDIコントローラーを作成することができます。

最初のステップ

ArduinoMIDI回路図

始める前に、MIDIケーブルのピンを確認できる写真を残しておきます。これにより、ピンを正しく識別でき、特に各ピンを接続する場所を特定できます。 大まかに言えば、この時点で行う必要があるのは、ケーブルのピン5を220オームの抵抗器に接続し、そこからArduino送信1、ピン4を220オームの抵抗器に接続し、そこからArduinoの5Vソケットに接続することです。 2はコントローラーのアース接続に接続する必要があります。

この手順を実行すると、これらの線のすぐ下にある写真に詳細な図が表示されなくなります。ボタンを接続します。 このセクションのアイデアは、digitalReadピン(到達する電圧がいつ変化するかを検出できる)を使用して、ボタンを押すだけでトランジスタを使用して実現できるようにすることです。 このためにボタンを使用するだけで、左側を5Vに接続し、右側を220オームの抵抗に接続し、そこからアースに接続し、右側をピン6に接続します。 。6番目のボタンも同じ方法で取り付けられますが、図に示されているように、ピン7の代わりにXNUMXに接続します。

ホームMIDIコントローラーに使用するソフトウェア

すべてのハードウェアを使い終わったら、機器を接続してテストします。 その前に私たちは持っている必要があります USB-MIDIインターフェースとMIDIケーブル データを送信しているボードをコンピュータに接続します。 これを実現するために、Arduinoにインストールしてプロジェクトに含める必要があるForty SevenEffectsのメンバーによって作成されたMIDIv4.2ライブラリを選択しました。

コンピューターの場合、Arduinoから到着するすべてのMIDIデータを監視できるプログラムが必要になります。 このために、MIDIモニター(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ÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   アルフレッド

    Arduinoはあなた自身でプロジェクトに着手する多くの可能性を提供します https://www.juguetronica.com/arduino 。 最高のことのXNUMXつは、専門家でなくても始めて学習を続けることができるため、独学でやる気を起こさせることができることです。

  2.   ダネル・ローマン

    ご挨拶。

    私はこの素晴らしいチュートリアルを実行しようとしています…しかし、#includesは完全ではありません…。

    どれが必要か教えていただけますか?

    どうもありがとうございます。

  3.   ウエル

    ねえ。
    ボタンを圧電信号が届くジャック入力に置き換えて電子ドラムモジュールを作りたいです。
    それは可能でしょうか?

  4.   エドゥアルドバレンズエラ

    このコードのインクルードを教えていただければ、私はこのプロジェクトに興味があります。