利用 Arduino 的演示程序,构建一个音乐播放器
扫描二维码
随时随地手机看文章
打开 MIDI 示例代码
编译以检查代码。此操作无需新的库或附加文件。调用 Setup() 函数即可开启 UART 电路,并通过 Serial.begin(31250) 设置默认的串行波特率或速度(适用于 MIDI)。
“Loop( )”会反复执行操作,直到整数变量“note”等于一个十六进制数为止。每个数代表一个不同的音符。函数“noteOn”会接收三个值来计算返回值。
关于此代码
这是一个简单的程序。该代码通过 UART 串行端口输出数字。我们循环遍历一系列音高或音符值。MIDI 协议将特定的音乐音符与十六进制数字进行对应关联。
函数 noteOn(int cmd, int pitch, int velocity) 接受三个整数参数。Serial.write(cmd) 发送第一个参数,而 Serial.write(pitch) 和 Serial.write(velocity) 则说明要使该音符发出多大的音量。
从整体来看。我们的示例代码会使用三个参数调用“noteOn”函数,以 50% 的音量在合成器中开启一个音符。然后,它会再次调用“noteOn”函数,但这次将音量设置为 0%,从而关闭该音符。
搭建一个闪烁电路
搭建这个电路,并将 MIDI 示例程序代码上传至电路板。我们的程序会在串行 TXD 线路上传输脉冲。模拟器会显示所发送的位。这些脉冲的频率太快(每秒 31,250 位)以至于我们无法看到 LED 的闪烁。
我们的串行传输引脚 1(TX)在无数据传输时会保持 +5 伏电压或处于高电平状态。要发送一个比特时,该引脚会降至地电位或极低电压。这样便于查看设备是否在总线上,并检测到来自外部的信号。
100 欧姆的电阻足够吗?可能不够。让我们来算一算。我们 Arduino 板的数字引脚 1 可以吸收 20 毫安的电流。我们需要至少 250 欧姆的电阻来确保芯片的安全。我们以后还会再提到这一点的。
波形
如果你有示波器,就能看到每次传输的单个字节。要注意接地问题,为了安全起见,请用电池为 Arduino 供电。我们降低电压的目的是为了使信号检测更加容易。
我们的波形速率为 31,250 波特。屏幕上的脉冲宽度是多少呢?Sparkfun 网站上有一篇关于 MIDI 字节如何组合的精彩教程。在这个脚本中发送的大多数 MIDI 命令都需要 3 个字节。
演奏音乐
我们的最终目标是在电脑或乐器上播放音乐,让我们的草图以声音的形式呈现出来。本项目的其余部分则专注于硬件、适配器和连接器。
我们将要探讨的电子设备非常简单。
MIDI 连接器适配器
许多 MIDI 设备都通过 USB 来传输我们在本项目中所看到的信号。本项目涉及的是 DIN-5 接口,它们看起来像 XLR 接口,但有 5 个引脚。这是从 MIDI OUT 接口(通过将第 4 个引脚接地来实现信号传输)内部观察到的景象。
USB-MIDI 适配器很容易就能买到,您的电脑也已准备好将其识别为 MIDI 输入/输出设备。更多相关信息请参阅“USB MIDI 适配器插件”项目。
MIDI 接口板
将你的护盾小心地连接到 Arduino 上。仔细对齐引脚并插入。UART 的发送和接收端口被引出至 DIN-5 连接器上,并在电路中添加了适当的电阻。我们的程序仅传输 MIDI,因此我们只使用 MIDI 输出连接器。
优诺板和护板组合起来就变成了一台电子乐器。想想看,用它们能做出什么样的作品吧。
仔细观察盾牌
让我们来看一下 Arduino MIDI 保护板的原理图中的 MIDI OUT 端口。在这里,我们可以看到 TXD 电路由电阻器 R14 和 R15 维护,每个电阻的阻值均为 220 欧姆。
我们这款 Arduino 板的数字引脚 1 能够吸收 20 毫安的电流。为了确保芯片的安全,我们需要至少 250 欧姆的电阻。而这款护套的设计者为了更加安全,将这个数值加倍了。
LED 可以插入接口中,但不应长时间保持该状态。
一份改进后的草图
新建一个草图,并将这段代码复制粘贴进去。接下来让我们快速了解一下它与 MIDI 草图的区别。它仍然会开启串行端口,并依次运行一系列音符值,然后重复这个过程。
对于每个音符(i),我们都会发送一个命令,使其以半音量开启,暂停后播放该音符,然后关闭该音符。Serial.write(0xFC) 是一个停止所有音符播放的命令。有时合成器会在未接收到停止命令的情况下播放音符。
本文编译自hackster.io





