通信部分-音乐

本实验因为需要外部设备才能验证效果,只做了解即可,未纳入套件。本例向你展示如何从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板
MIDI母接口
2个220Ω电阻
跳线
可用的MIDI设备(可选,为了测试)
连接线

电路
clip_image002
根据MIDI协议要求,所有的MIDI接口都应是母口。
下面展示如何连接MIDI母口:
MIDI母头5号引脚用一个220Ω电阻连接到数字引脚1
MIDI母头2号连接到GND
MIDI母头4号通过220Ω电阻+5V

原理图
clip_image004

代码

注意!如果你在用搭载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);
} 
0
分享到:

评论0

请先

原Arduino365.com域名更改为品牌域名ultirobot.com,承载内容要将更丰富,网站也进行了改版,改善阅读体验。
没有账号? 忘记密码?