首页 > 分享 > 13. 制作光电子琴与MIDI电子鼓

13. 制作光电子琴与MIDI电子鼓

发声体和声音

扬声器(speaker)和蜂鸣器(piezo transducer)
piezoelectric(压电感应)
音频:振动的频率
音高(pitch):声音的频率(音频)高低
tone()指令:
tone(输出端口, 频率, 持续时间);
或 tone(输出端口, 频率),若不指定时间,Arduino将持续发声,直到执行noTone()为止。

动手做 13-1 演奏一段马里奥旋律

程序代码:

const byte SP_PIN = 11; void setup() { pinMode(SP_PIN, OUTPUT); } void loop() { tone(SP_PIN, 659, 150); //弹出一个E5音高的四分音符 delay(150); tone(SP_PIN, 659, 150); delay(150); tone(SP_PIN, 659, 150); delay(300); tone(SP_PIN, 523, 150); delay(150); tone(SP_PIN, 659, 150); delay(150); tone(SP_PIN, 784, 150); delay(3000); }

1234567891011121314151617181920 使用#define 替换数据

在上面的程序加入如下:

#define E5 659 #define C5 523 #define G5 784 123

#define和const都能用一个名称来代表数值

const byte LED_PIN = 13; #define LED_PIN 13 12

当定义数组常量时,只能用const。

输出高品质的音效

自然界或乐器所发出的声音,是由多种不同频率的正弦波组成的复合波,而tone()指令仅能输出固定的方波,音质无法媲美乐器,可参考几个扩展模块。

Adafruit 的Wave Shield for Arduino KitSparkfun的MP3 Player ShieldBabbleShieldSpeakJet Shield

13-4 认识反射型与遮光型光电开关

反射型光电开关: 又称为反射型传感器,由一个红外线发射LED以及一个光敏晶体管(红外线接收器)所组成,它们的外观和一般的LED一样,它采用的是将发射和接收组装在一个模块的反射型光电开关。传感器里的LED能发射红外线光,若传感器前方有高反射的物体(如:白纸),红外线光将被折射,由光敏晶体管接收,而晶体管发射极将输出高电位,相反地,若前方没有物体或者是低反射的物体(如黑纸),光敏晶体管将收不到红外线光,因而输出低电位。这种元器件可应用在检测条形码,或者像上图一样,在一个圆盘上绘制黑色条纹(称为圆盘编码器),安装在电机或其他驱动机械上,可以检测物体的旋转角度或者转动圈数。发射型光电开关和被感测物体的距离,应介于1~8mm,2.5mm的效果最好。另一种称为遮光型光电开关的传感器,也常见于微电脑自动控制装置。

动手做13-2 光电子琴制作

实验说明: 本节将采用红外线传感器当做“琴键”通过感应纸张上的黑白条纹,让Arduino发出对应的音调。

MIDI信息格式

MIDI外设以31.25kbps的速率来发送TTL形式(也就是5V代表高电位)的串行数据。一个MIDI信息通常由3个字节数据构成,分别代表状态(status)、音高(pitch)和强弱(velocity,按下按键时的力量强弱)。MIDI信息的3个字节数据:MIDI的频道号从00001111共16组,音高编号与强弱的数据字节的最高位始终为0,因此有效的数值范围是0127

动手做13-3 通过Arduino演奏MIDI音乐

实验说明: 制作一个MIDI OUT(输出)接口,从Arduino板传输MIDI信息给电脑音源发出音乐。
实验电路: MIDI接口采用5针DIN插座,此元器件的引脚比较不易插入面包板,建议先在它的引脚焊接导线
实验程序: 程序采用SoftwareSerial(软件串口)扩展库,将从中央C的前一个八度音到它的后一个八度音,依序弹奏每一个音符。

#include <SoftwareSerial.h> // byte note; SoftwareSerial MIDI(2, 3); // void midiMsg(byte cmd, byte pitch, byte velocity) { MIDI.write(cmd); //状态信息,write()指令用于在 MIDI.write(pitch); //音高值 MIDI.write(velocity); //强弱值 } void setup() { MIDI.begin(31250); //串口连线要设置成MIDI的传输速率 } void loop() { for (note = 48; note < 84; note ++) { midiMsg(0x90, note, 0x40); //送出“按下琴键”及其他信息。 delay(100); midiMsg(0x80, note, 0x00); // delay(1000); } }

123456789101112131415161718192021

实验结果: 编译并下载程序之后,将Arduino的MIDI输出接口与电脑的MIDI 转接线的“IN”相连,再打开“虚拟MIDI键盘”软件。

通过MIDI信息更换音色

动手做13-4 通过“虚拟MIDI”接口演奏音乐

**实验说明:**想必读者一定感到纳闷,既然MIDI接口采用串行联机,那为何我们不直接通过既有的接口,把MIDI信息传给电脑,通过音源软件发声呢?没问题!只要在电脑上安装“串口转MIDI桥接器”软件,让电脑把指定的串口看待成MIDI适配卡就可以了!当然,如果要将Arduino直接和其他MIDI乐器相连
实验软件:

相关知识

大觉者电脑音乐教程『第三课』──MIDI的“鸟语”:控制信息
【广州电子宠物游戏机价格
【玩具蛇电子琴图片大全图片大全图片大全】
【佛山电子宠物游戏机价格
什么是鼓翅鸣螽,鼓翅鸣螽的习性特征与喂养等
认识1=G,G调跟唱,掌握电子琴中15个调弹奏技巧
音乐应用:音乐治疗运用的乐器
天天风之旅新宠物鼓猴王与玛丽莲是真是假?
【湖北电子宠物游戏机价格
收购大量库存电子/电动玩具 宠物玩具 游乐设施

网址: 13. 制作光电子琴与MIDI电子鼓 https://m.mcbbbk.com/newsview1149069.html

所属分类:萌宠日常
上一篇: 绿树倒映,鸟鸣啾啾....宝山让
下一篇: 拐杖应用的前世今生