本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于Arduino的MIDI控制器

发布时间:2021-07-16
分享到:

基于Arduino的MIDI控制器

发布时间:2021-07-16
分享到:

该项目是利用旧的电脑鼠标,把它改造成一个MIDI控制器。该控制器将利用旧电脑鼠标的所有功能。也就是将不同的MIDI命令映射到X轴和Y轴上的左键单击、右键单击、鼠标滚轮单击、鼠标滚轮滚动和鼠标移动。

将midi pitch映射到X轴位置,而将midi volume(称为“速度”)映射到Y轴位置。鼠标滚轮的位置,将决定连续控制器的值。在默认设置中,是CC1 - mod wheel值。

该设备的操作基于两种模式,可以通过点击鼠标滚轮进行切换。在Glissando模式下,设备一次只能播放一个MIDI音符。鼠标左键或右键单击映射到相同的注释。在点击的同时移动鼠标可以在音符之间无缝移动。在间隔模式中,鼠标左键和右键的点击映射到不同的音符,所以可以通过先点击鼠标的一个按钮,然后移动鼠标的X轴位置,然后点击另一个鼠标按钮来播放间隔。

电路图:

用户界面:

给控制器一个直观和完全建立的用户界面,这样用户就不必依赖于计算机显示才能使用设备。也就是说控制器可以与任何能够通过USB读取MIDI的设备一起使用。通过使用LED双色8 * 8矩阵和128 * 64单色I2C显示器来做到这点。

LED矩阵提供了鼠标的X轴和Y轴位置的表示,X轴上的光线模式是基于C大调音阶的一个八度。模式如下图所示,它会在中音C以上的-5到+4个八度音阶重复。

与X轴不同,Y轴没有“循环”,因此127个可能的体积值映射到矩阵的8个位置。如下图所示:

在Glissando模式下,矩阵在一个音符被按下之前会亮绿灯显示鼠标的位置,而在一个音符被按下时则会亮红灯。在间隔模式下,矩阵在鼠标左键被按下时为红色,在鼠标右键被按下时为橙色,在鼠标当前位置为绿色。

除了LED矩阵,还有一个128 * 64 OLED单色显示屏,显示当前的笔记和音量,以及鼠标滚轮的位置和操作方式。下面显示了该显示器的注释图像。

组装:

在面包板上连接组件,在Arduino IDE上使用库管理器安装以下库:

  • MIDIUSB (用于通过USB发送MIDI)
  • Adafruit_LEDBackpack (用于与LED矩阵通信)
  • Adafruit_GFX (用于OLED显示屏)
  • Adafruit_SSD1306 (与OLED显示屏通信)

从GitHub安装以下库与PS/2鼠标适配器通信——ps2鼠标

从GitHub仓库下载代码,并将其上传到Arduino。

制作音乐:

连接电路并上传了代码,连接一个ps/2滚轴鼠标并检查UI是否正常工作。如果是,该设备现在就可以用作MIDI控制器了。如果以前从未在PC上使用过MIDI控制器来制作音乐,建议你参考MIDI设备文档中的MIDI声音生成在Windows上的说明。

如果以前使用过MIDI,那么可以像使用任何其他MIDI控制器一样使用该设备。在下面的图片中,展示了如何使用Pro Tools 12。

需注意:MIDI通道固定在通道1(想改变该值,需改变代码中的midchannel常量)。鼠标滚轮映射到CC 1,这也可以在代码中更改。

如果对代码稍加修改,可以尝试更改鼠标的灵敏度,或者X、Y位置或鼠标滚轮对应的MIDI参数。

代码:点击下载

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论