欢迎光临
我们一直在努力

通信部分-音乐

本实验因为需要外部设备才能验证效果,只做了解即可,未纳入套件。本例向你展示如何从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); 

未经允许不得转载:Arduino-Maker » 通信部分-音乐

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

线上商城

中贝斯特创客空间蘑菇云创客教育