怎样翻译在Arduino上播放的歌曲

电子说

1.3w人已加入

描述

步骤1:MXL文件

A

A

A

我发现的MXL文件最佳来源是musescore.com,大量的收藏用户提交了乐谱增强音乐。 MXL文件是压缩的xml文件,其中包含语音,乐器,音符和持续时间定义。我下载了Riley Apperson的这个版本的Stranger Things主题曲。

可以下载许多音乐格式,但是MXL包含转换为Arduino可以播放的音乐所需的信息。

上面的图片2显示了以PK开头的内容,这是文件被PK Zip压缩后的立即泄漏。

图片3是未压缩的相同文件,包含标准XML格式。

步骤2:MXL文件数据

A

在数据中有几件事情要看。请记住,我们必须使音符和整体歌曲保持简单,因为没有比Arduino更强大的功能或其他一些技巧,我们一次只能演奏一个音符。

音符步骤-E

音符八度音阶-3

持续时间-1ms ish

声音-语音将在彼此之上分层叠加。您可能需要找到歌曲的简单版本,或者挑选出想要的每种声音的哪个部分。

我获取了此信息,使用C#进行了解析并将其放入arduino代码中

步骤3:Arduino代码

从MXL文件中解析数据之后,我将其放入arduino代码中。必须播放持续时间才能使歌曲以您的感觉呈现出来。您可以找到我在GitHub上编写的Arduino代码。

int notes [] = {NOTE_C3,NOTE_E3,NOTE_G3,NOTE_B3,NOTE_C4

int持续时间[] = {750、750, 750、750、750

现在看来,我看到多维数组会更有效。音符和持续时间相对应,因此,如果有5个音符,则应该有5个持续时间。

每个音符都定义为一个音调

#define NOTE_B0 31

#define NOTE_C1 33

#define NOTE_CS1 35

#define NOTE_D1 37

然后循环遍历数组中的每个音符,然后使用上面显示的音符定义进行播放。

tone(8,notes [thisNote],noteDuration);

请注意,Arduino Uno有文件大小限制,因此必须缩短注释量以达到该限制。我编写的应用程序有一个音符限制器,可以更改它以满足您的需求。

步骤4:C#

A

我编写了一个用C#编写的小型应用程序以解压缩MXL,解析出音乐数据,然后将arduino格式输出到文本区域。该应用程序的源代码位于GitHub上。

请注意,Arduino Uno有文件大小限制,因此必须缩短注释量才能达到该限制。我编写的应用程序具有一个音符限制器,可以对其进行更改以满足您的需求。

第5步:Arduino接线

这非常简单。我只是使用了对讲机中的压电体,然后将“正极”(红色)连接到引脚8,将“负极”(黑色)连接到地面。

步骤6:音频预览

这是arduino产生的音频的预览。

步骤7:文件

所有需要的文件都在GitHub上https://github .com/MrRedBeard/DotNet-MXL-Parsing-for-Arduino

只需在此处下载MXL Parser。

Arduino代码在一个文件中,但需要在第50行上分为2。audio.ino和pitches.h。也可以从GitHub上获取该代码。

Rangerley Apperson在musescore.com上提供的Stranger Things主题曲MXL示例文件

步骤8:应用程序的未来

首先,我要说的是我不介意帮助他人进行他们的项目,但是就应用程序而言,除非有其他项目出现,否则我不打算对它做太多其他事情。话虽如此,如果其他人想贡献和/或与之合作,我将很乐意加入并竭尽所能。

如果您想做出贡献,请访问GitHub https://github.com/MrRedBeard/DotNet-MXL-Parsing-for-Arduino并开始使用。向我发送消息或只是开始将代码发布到新分支,其中包含您所做的更改的详细信息。

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐
  • A

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分