描述
我在网上搜索了如何使用 Arduino 构建 USB 到 MIDI 适配器,但不幸的是我只找到了不太好的解决方案(糟糕的 MIDI 软件或硬件实现)。所以我决定自己构建并将结果放在 hackster.io 上。
我使用带有面包板的 Arduino Leonardo 构建了第一个原型。一旦一切正常,我就使用 Arduino Micro 构建了一个焊接版本。两者都基于 ATmega32u4,它具有原生 USB,允许它作为 USB MIDI 接口呈现给您连接的 PC。
MIDI 使用光耦合器和一些电阻器来创建完全隔离的电流环路。该电路非常标准,我使用了 6n137,因为它速度快且应用广泛。如电路图所示,只有 MIDI OUT 连接器的引脚 2 接地,这是 MIDI 的标准。
一些最终结果的照片:
1 / 4 •盒子里面
在软件方面,我决定使用出色的Control Surface库。与其他一些库或手动编码的实现不同,Control Surface 可以正确处理稍微复杂的 MIDI 协议的所有不同方面。
Control Surface 还可以让您添加各种附加功能。例如,您可以添加一些连接到模拟/数字输入的电位计、踏板或按钮,以添加额外的 MIDI 控制。只需在Control Surface网站上查看更多信息,这真的很容易做到!
您还可以注册回调,以便在从 MIDI 传输到 USB 或其他方向之前处理数据。在我的例子中,我用它来修复我的 Roland D50 合成器损坏的 MIDI 实现。每次按下最后一个键时,D50 都会发送“所有音符关闭”命令。现代实现,例如我使用的大多数 VST 乐器,将此解释为所有运行音符延音的立即硬中断。通过过滤“所有音符关闭”,D50 再次成为有用的主键盘。
我在使用 Control Surface 库时遇到的一个问题是它不能很好地处理大型 SysEx 包。这导致在尝试使用 D50 编辑器/库管理员时出错,因为它发送了相当大的 SysEx 包。我在源代码的评论标题中添加了有关如何解决此问题的说明。写这个库的人表示这个问题会在 2.x 版本出来后得到解决。
我包括了基本的 USB 到 MIDI 接口源代码和一个带有“所有音符关闭”过滤的版本。
当然,您也可以使用其他库或编写自己的 MIDI 实现,硬件应与任何支持 USB MIDI 和串行 MIDI 的 MIDI 库一起使用。
故障排除提示:如果您似乎无法使用此接口与外部 MIDI 设备通信,则可能是您交换了引脚 4 和 5。连接器引脚图有时会令人困惑,因为它们并不总是清楚地表明连接器的哪一侧您正在查看的连接器。
我希望原理图和源代码对这里的任何人都有用。如果您喜欢这个项目,请给我一个大拇指,如果您有任何问题,请随时在下方发表评论。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !