使用Arduino製作自己的MIDI控制器

MIDI

如果您是音樂愛好者或者是直接的業餘或專業音樂家,那麼肯定在您的家裡已經積累了許多樂器。 為了使所有這些混合完美,最好獲得一個 MIDI控制器。 不幸的是,這些類型的對象通常非常昂貴,因此對於沒有太多資源的人來​​說,很難訪問他們可以提供的一切。

為了更好地理解什麼是MIDI控制器,請告訴您MIDI這個詞來自 樂器數字接口即,使電子音樂設備可以彼此通信的一種控制器。 例如,如果您在家中有電子鍵盤,則很有可能具有MIDI接口。 在繼續前進之前,儘管存在某些技術細節可能使人相信的事實,但必須非常清楚, MIDI不是音頻.

通過這個簡單的教程創建自己的MIDI控制器

一旦我們清楚了這一點,您肯定會更容易理解MIDI只是一個簡單的 指令集能夠支持多達16個獨立通道,這意味著最多可以有16個不同的設備彼此獨立通信。 這些設備必須通過5針DIN電纜連接,該電纜基本上是連接器內部具有5針的電纜。 詳細地說,使用USB代替XNUMX針DIN是很普遍的,如果使用USB,我們必須創建一個USB-MIDI接口。

事不宜遲,我留下了鏈接,您可以在其中找到 教程 一步一步地 描述性圖像 在這裡我們可以執行所有必要的操作來創建我們自己的MIDI控制器。

相關文章:
如何在我們的Raspberry Pi上更改Pi用戶名和密碼

如何使用Arduino製作自己的MIDI控制器

MIDI連接器

由於個人和專業的不同原因,許多人需要使用 完全自定義的MIDI控制器 因為也許並且作為示例,在您作為藝術家的生活中的某個時刻,購買便宜的MIDI控制器可能無法滿足您的期望或需求,而在時機成熟時,選擇專業版本可能會在兩種財務資源上都過分。需求,以及他們可以提供的大量功能。

因此,今天我想向您展示所需的一切,以便您可以製作自己的MIDI控制器,同時指出其構造所需的一切,並為您提供需要安裝的軟件。 詳細來說,對於這個項目,使用Arduino板是必不可少的,它是一個功能強大的控制器,可以執行此任務。

如何製作機器人
相關文章:
如何製作機器人:3種不同的選擇

什麼是MIDI控制器?

MIDI

基本上,從廣義上講,MIDI控制器負責將不同的音樂設備相互連接。 許多都是帶有MIDI接口的樂器,儘管由於很多用戶經常感到困惑,這必須非常清楚,但MIDI不是音頻文件,而是樂器可以接收的非常簡單的一組指令,以進行不同的控制。或聲音設置。

內部MIDI 有兩種不同的類型一方面,我們有一個稱為“更改控制”的控件,它具有控制器編號和介於0和127之間的值。因此,可以發出消息,其中可以更改諸如音量或音調之類的不同參數。 接受MIDI的不同樂器應隨身攜帶一本手冊,說明默認設置了哪些通道和消息以及如何更改它們。

其次,我們有程序變更,這一系列的消息反過來比組成變更控制的消息要簡單得多。 這些類型的消息用於更改設備的預設或補丁。 與變更控制一樣,製造商必須隨儀器一起提供一本手冊,以說明特定信息更改了哪些預設。

構建自己的自製MIDI控制器所需的零件

Midi連接器原理圖

為了能夠構建自己的MIDI控制器,除了我們已經提到的Arduino板之外,您還需要一系列的配件。 在繼續之前,只是告訴您,也許將來,由於您想擴展項目,您需要做更多的事情,儘管此時只有幾塊就可以了。

我們將需要一條5針DIN母頭電纜,2 220歐姆電阻器,2個瞬時開關,2個10k歐姆電阻器,連接線,電路板,MIDI電纜和MIDI設備或USB接口。 僅用這些片段,您就可以按照我的步驟開始製作自己的MIDI控制器。

第一步

Arduino Midi原理圖

在開始之前,我先為您提供一張圖片,您可以在其中看到MIDI電纜的針腳,這樣我們就可以正確識別針腳,尤其是在連接各個針腳的位置。 廣義上講,此時您要做的就是將電纜的引腳5連接到220歐姆電阻,然後從那裡連接到Arduino Transmit 1,引腳4連接到220歐姆電阻,然後從那裡連接到Arduino的5V插座,而引腳2必須連接到控制器的接地連接。

完成此步驟後,在這些線條正下方的照片中將沒有詳細的圖表,該是連接按鈕的時候了。 本節中的想法是使用digitalRead引腳(能夠檢測到達的電壓何時變化)來實現,可以通過按下按鈕來使用晶體管來實現。 為此,我們只需要使用一個按鈕即可,將其左側連接到5V,將右側連接到220 ohm電阻,然後從那裡接地,同時將右側也連接到引腳6 。第二個按鈕將以相同的方式安裝,儘管,如您在圖中所看到的,我們將其連接到引腳6而不是引腳7。

用於家用Midi控制器的軟件

一旦我們完成了所有硬件的安裝,就可以連接我們的儀器並進行測試了。 在此之前,我們需要有一個 USB-MIDI接口和MIDI電纜 將正在發送數據的開發板與我們的計算機連接。 為了實現這一點,我們選擇了由4.2個特效人員創建的MIDI vXNUMX庫,該庫必須已安裝在Arduino上並包含在項目中。

對於計算機,我們將需要一個程序,該程序能夠監控從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);

POR:

midiOut.sendControlChange(value, channel);

其中值和通道必須具有要顯示的所需值。

操作示例:


4條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   阿爾弗雷德 他說:

    Arduino為您提供了許多自行承擔項目的可能性 https://www.juguetronica.com/arduino 。 最好的事情之一是,您可以在沒有專家的情況下開始學習,繼續學習,從而激發自己的自學能力。

  2.   丹尼爾·羅曼(Danel Roman) 他說:

    問候。

    我正在嘗試做這個很棒的教程……但是#includes還不完整……。

    你能告訴我哪些是必要的嗎?

    非常感謝。

  3.   烏爾 他說:

    您好!
    我想通過將按鈕替換為將要到達壓電信號的插孔輸入來製作電子鼓模塊。
    有可能做到嗎?

  4.   愛德華多·瓦倫蘇埃拉(Eduardo Valenzuela) 他說:

    請提供此代碼的包含內容,請對此項目感興趣。