这是我在爱折腾上面翻译的一篇文章,爱折腾网址见下方
爱折腾网址
http://www.izheteng.com/diy/midi-piano-instructor.html
原文网址
http://www.5volt.eu/archives/94
MIDI钢琴教师其实从本质上来讲,是一个很特殊的演奏谱,通过它,你弹奏电子琴时可以不用抬头看着曲谱,我觉得它更可贵的一点在于,提高学习电子琴的初学者的信心与兴趣。
它将我们演奏电子琴的状态改变
以前弹奏需要抬头看曲谱,可能对于老练的人来讲不是问题,但是对于初学者来讲绝对是一种打击,除非你很有天赋。(这个结论是笔者就自己刚开始弹吉他的情景总结的。)而现在只需要弹奏亮着的LED灯所对应的按键(它们在位置上是一一对应的,如下图。)
我相信这样的话,对于初学者来说肯定很轻松了。(不过从音乐素养的角度来讲,熟练后最好还是按五线谱来弹奏,这样能培养对音高的一种感觉。这也就是为什么吉他大师们总在对大家说的:摒弃方便的六线谱,回归五线谱,找寻真正的音乐。)
那这个MIDI钢琴教师的原理是什么呢?
它的原理其实不复杂,简单来说就是解码电脑发出的MIDI信号,读出其中弹奏的音符,以及弹奏时间等等信息,然后输出到LED显示
这时候就涉及到MIDI的知识了。
首先是MIDI设备接口分为三种:IN(输入), OUT(输出)和THRU(穿越)。
MIDI数据流通常由MIDI控制器(MIDI controller)产生,如乐器键盘(musical instrument keyboard),或者由MIDI音序器(MIDI sequencer)产生。
通常,MIDI数据流的接收设备是MIDI声音发生器(MIDI sound generator)或者MIDI声音模块(MIDI sound module),它们在MIDI IN端口接收MIDI信息(MIDI messages),然后播放声音。
当然我们这里的MIDI钢琴教师也作为MIDI接收设备,不过它不是发出声音,而是解码MIDI,然后将其中的音乐用LED可视化的展现出来,也就形成了LED可视化乐谱。
单个物理MIDI通道(MIDI channel)分成16个逻辑通道,每个逻辑通道可指定一种乐器,用4个二进制位来表示这16个逻辑通道。音乐键盘可设置在这16个通道之中的任何一个,而MIDI声源或者声音模块可被设置在指定的MIDI通道上接收。
而在这里我们需要的仅仅是MIDI数据流中音符的信息,对它的通道并不关注。(当然,如果你想把这个MIDI钢琴教师扩展为MIDI乐队教师,那就另当别论了。)
下面让我们来简单的了解下MIDI数据流的格式
MIDI数据流的格式其实和串口协议是一样的,31250的波特率,一位起始位,八位数据位,一位结束位,无奇偶校验。(注意以下讲的MIDI的知识是比较初级的,现代MIDI的数据流比这个复杂,因为庞大的音色库,各种丰富的音乐表情,扩大了MIDI数据流。
状态字节 | 数据字节1 | 数据字节2 | Message | Legend |
1000nnnn | 0kkkkkkk | 0vvvvvvv | Note Off | n=channel number; k=key 0-127(60=middle C); v=velocity (0-127) |
1001nnnn | 0kkkkkkk | 0vvvvvvv | Note On | n=channel number; k=key 0-127(60=middle C); v=velocity (0-127) |
状态字节以1开头。
状态字节中第四位表示的是,当前音符奏响(1),静止(0)
状态字节后面四位也就是选择MIDI通道,4位二进制,代表16个逻辑通道。
数据字节以0开头。
数据字节1
后面7位一起表示所按的键的音高(或者简单来说就是音高),7位也就是有127个音符,60代表中央C,加1代表升一个半音,减1代表降一个半音,具体多少可以自己推导
数据字节2
同样的以0开头。
后面7位一起表示力度
举个例子吧
status byte | data byte1 | data byte2 |
1001 0100 | 00111100 | 01111111 |
奏响音符, 通道5
|
60 中央C |
最大力度 |
status byte | data byte1 | data byte2 |
1000 0100 | 00111100 | 01111111 |
关闭音符, 通道5
|
60 中央C |
最大力度 |
硬件电路
整个电路见电路图,还有程序代码。
这里讲讲电路模块。
1.MIDI解码电路。
这里由AVR单片机实现,当然你也可以采用其他的单片机,8051,PIC。。。
主要就是一个单片机最小系统。这里用到了AVR单片机自带的ADC,ADC采集一个电位器调节点电压,然后控制LED的亮度。
2.LED驱动电路
硬件电路需要那么多LED显示(88标准琴键对应88个LED),当然少不了矩阵形式的电路来帮忙了。
LED矩阵驱动,实质类似于矩阵键盘,相信玩过单片机的朋友们都不陌生,这里选用的LED驱动属于大电流驱动器(毕竟那么多LED,不要用74HC04这样的非门驱动,除非你只驱动几个LED)。行列均选中的LED才亮。
注意,电路里面的LED限流电阻的阻值的选取是建立在所选LED为蓝色的超高亮度LED,如果你使用红色,或者绿色,建议将限流电阻改为470 Ohm。
3.MIDI接口
接口比较简单,但是注意2点
两个MIDI接口。MIDI IN 用来连接电脑的游戏接口传来的MIDI信号,MIDI Though则用来连接到电子琴的MIDI输入端,MIDI Though的信号与电脑输出的MIDI信号是相同的(相当于把电脑的输出分流。)
电脑输出,要经过光耦隔离,不能与后级共地,如果共地的话,电子琴的音乐将会有“hums”的杂音。因为如果共地的话,MIDI THRU将会与MIDI IN等效去驱动光耦中的LED,产生噪音。
软件
这个软件其实也比较简单,等效于串口协议,加上矩阵键盘,再加一个LED亮度控制。
软件里面其实还写了一个升调,就是按一下键,升半音。
最后控制器的外观,从左至右,第一个是MIDI接口,第二个是LED亮度控制,第三个是升调按键,第四个是电源接口。
这个就是放在电子琴上面的MIDI钢琴教师。
Translate By Gibson
文章评论(0条评论)
登录后参与讨论