如果您是音乐爱好者或直接是业余或专业音乐家,那么肯定在您的家里已经积累了许多乐器。 为了使所有这些混合完美,最好获得一个 MIDI控制器。 不幸的是,这些类型的对象通常非常昂贵,因此对于没有太多资源的人来说,很难访问他们可以提供的一切。
为了更好地理解什么是MIDI控制器,请告诉您MIDI这个词来自 乐器数字接口即,使电子音乐设备可以彼此通信的一种控制器。 例如,如果您在家中有电子键盘,则很有可能具有MIDI接口。 在继续前进之前,尽管存在某些技术细节可能使人相信的事实,但必须非常清楚, MIDI不是音频.
通过这个简单的教程创建自己的MIDI控制器
一旦我们清楚了这一点,您肯定会更容易理解MIDI只是一个简单的 指令集能够支持多达16个独立通道,这意味着最多可以有16个不同的设备彼此独立通信。 这些设备必须通过5针DIN电缆进行连接,该电缆基本上是连接器内部具有5针的电缆。 详细地说,使用USB代替XNUMX针DIN很普遍,如果使用USB,我们必须创建一个USB-MIDI接口。
事不宜迟,我留下了链接,您可以在其中找到 教程 一步一步地 描述性图像 在这里我们可以执行所有必要的操作来创建我们自己的MIDI控制器。
如何使用Arduino制作自己的MIDI控制器
由于个人和专业上的不同原因,许多人需要使用 完全定制的MIDI控制器 因为也许作为一个例子,在您作为艺术家的人生中的某个时刻,购买廉价的MIDI控制器可能无法满足您的期望或需求,而在时机成熟时,选择专业版本可能对双方的财务资源都造成了过多的损失。需求以及它们可以提供的大量功能。
因此,今天我想向您展示您需要的所有东西,以便您可以制作自己的MIDI控制器,指出其构造所需的所有东西,并为您提供需要安装的软件。 详细来说,对于这个项目,使用Arduino板是必不可少的,这是一个功能强大的控制器,可以执行此任务。
什么是MIDI控制器?
基本上,从广义上讲,MIDI控制器负责将不同的音乐设备相互连接。 许多都是带有MIDI接口的乐器,尽管由于很多用户经常感到困惑,这必须非常清楚,但MIDI不是音频文件,而是乐器可以接收的非常简单的一组指令,以进行不同的控制。或声音设置。
内部MIDI 有两种不同的类型一方面,我们有一个称为“更改控制”的控件,它具有控制器编号和介于0和127之间的值。因此,可以发出消息,其中可以更改诸如音量或音调之类的不同参数。 接受MIDI的不同乐器应随身携带一本手册,说明默认设置了哪些通道和消息以及如何更改它们。
其次,我们有程序变更,这一系列的消息反过来比组成变更控制的消息要简单得多。 这些类型的消息用于更改设备的预设或补丁。 与变更控制一样,制造商必须随仪器一起提供一本手册,以说明特定信息更改了哪些预设。
构建自己的自制MIDI控制器所需的零件
为了能够构建自己的MIDI控制器,您需要在Arduino板上另外添加一系列内容,正如我们已经提到的那样。 在继续之前,只需告诉您,也许将来,由于您想扩展项目,您需要做更多的事情,尽管此时只有几块您会拥有很多。
我们将需要一条5芯母头DIN电缆,2 220欧姆电阻器,2个瞬时开关,2个10k欧姆电阻器,连接线,电路板,MIDI电缆和MIDI设备或USB接口。 仅用这些片段,您就可以按照我的步骤开始制作自己的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);
通过:
midiOut.sendControlChange(value, channel);
其中值和通道必须具有要显示的所需值。
操作示例:
Arduino为您提供了许多自行承担项目的可能性 https://www.juguetronica.com/arduino 。 最好的事情之一是,您可以在没有专家的情况下开始学习并继续学习,从而激发自己的自学能力。
问候。
我正在尝试执行这个很棒的教程……但是#includes还不完整……。
你能告诉我哪些是必要的吗?
非常感谢。
嘿。
我想通过将按钮替换为将要到达压电信号的插孔输入来制作电子鼓模块。
有可能做到吗?
请提供此代码的包含内容,请对此项目感兴趣。