【Arduino官方教程第一辑】示例程序 4-4 MIDI音乐

MIDI音乐

本例向你展示如何从Arduino或Genuino板通过标准5端子DIN接口(standard 5 poles DIN)发送MIDI音符标准发送到MIDI乐器。

MIDI是乐器数字接口(Musical Instrument Digital Interface)的简称。它是用来控制电子合成器、编曲机以及其他乐器的一个很有用的协议。MIDI设备主要分为两个大类:第一类是控制器(换句话说就是根据人类操作生成MIDI音符的设备)。第二类是合成器(包括采样器、编曲机等等诸如此类),合成器读取MIDI数据来发声、发光或者产生其他效果。

MIDI其实是一个串口协议,在比特率 31250bit/s工作。板子内置的串口(包括MEGA板)能够以这个速率传输数据。

MIDI 字节(byte )可以被分为两种:控制字节数据字节。控制字节值一般都>=128(十六进制0x80-0xFF)。数据字节值一般都在0到127之间(十六进制0x00-0x7F)。控制字节包含了音符播放、音符停止、滑音等诸如此类。数据字节则包含单个音符的音调、速度或者音符的强弱(响度),滑音的量等诸如此类。想要了解更多关于MIDI的细节,请参看互联网上的各种MIDI协议说明书。

MIDI数据通常以十六进制计数,因为MIDI banks和MIDI乐器都用的是用16进制

想要了解更多关于MIDI,你可以了解下introduction to MIDI 或者这个例子。

完成本例所需的硬件设备

Arduino Uno板或Genuino Uno板
MIDI母接口
2个220Ω电阻
跳线
可用的MIDI设备(可选,为了测试)
连接线

电路连接

根据MIDI协议要求,所有的MIDI接口都应是母口。
下面展示如何连接MIDI母口:
【Arduino官方教程第一辑】示例程序 4-4 MIDI音乐_第1张图片
MIDI母头5号引脚用一个220Ω电阻连接到数字引脚1
MIDI母头2号连接到GND
MIDI母头4号通过220Ω电阻+5V

原理图

【Arduino官方教程第一辑】示例程序 4-4 MIDI音乐_第2张图片

例程代码

注意!如果你在用搭载ATmega32U4型号处理器的板子(比如DUE或者Leonardo),请不要用Serial(TX0/RX0),而应使用Serial1(TX1/RX1),在下列代码中也要把Serial改为Serial1。

/* MIDI音乐 本例向你展示如何是用1号引脚(串口传送引脚)来发送MIDI音符数据。 如果将MIDI乐器连上MIDI乐器,Arduino就会不断的“弹奏”F#-0 (0x1E)到F#-5 (0x5A)的音阶。 电路搭建: * MIDI母头5号引脚用一个220Ω电阻连接到数字引脚1 * MIDI母头2号连接到GND * MIDI母头4号通过220Ω电阻+5V 连接MIDI线到接头上,并且把MIDI线插上乐器。然后就享受Arduino演奏家的奇妙旋律吧! 代码是公开的 */

void setup() {
  // 给串口设置MIDI的波特率:
  Serial.begin(31250);
}

void loop() {
  //从F#-0 (0x1E)弹到F#-5 (0x5A):
  for (int note = 0x1E; note < 0x5A; note ++) {
    //在参数一传入了channel 1 (0x90),参数二传入了一些音符值 (note), 参数二传入了silent 速度(0x00):
    noteOn(0x90, note, 0x00);
    delay(100);
  }
}

// 弹奏音符,请不要尝试给第一个参数cmd传入任何大于127的值:
void noteOn(int cmd, int pitch, int velocity) {
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}

相关资料

serial.begin()
for()循环
ASCIl表:展示Arduino先进的串口输出函数。
调光器:轻点鼠标来改变LED的亮度。
数据图表:发送数据到电脑,并且使用Processing来绘图。
MIDI音乐: 以串口发送MIDI音符。
MIDI音乐[Mega]:使用Arduino Mega上的两个串口。
控制LED:从Processing或Max/MSP来开关LED.
读取ASCII字符串:解析一串用逗号分隔的整数(以字符串类型传递)来让LED渐隐。
串口双向调用:用双向调用/握手连接(handshaking)的方法发送多个变量值。
串口双向调用(使用ASCII码):用双向调用/握手连接(handshaking)的方法发送多个变量值,并且在转发之前将这些变量的值通过ASCII解码。
串口事件:展示SerialEvent()函数的使用。
虚拟调色盘:用Arduino发送多个变量的值到电脑,然后用Processing或Max/MSP读取它们。

更新进程

日期 日志 译者
2016年5月12日 创建并翻译文档 唐家勋

译者:唐家勋
邮箱:[email protected]
QQ:649196486
转载请注明出处,一切只因为热爱。
希望您能指出宝贵意见,谢谢。
【Arduino官方教程第一辑】示例程序 4-4 MIDI音乐_第3张图片

你可能感兴趣的:(音乐,标准,界面,arduino,digital)