步骤1:MXL文件
我发现的MXL文件最佳来源是musescore.com,大量的收藏用户提交了乐谱增强音乐。 MXL文件是压缩的xml文件,其中包含语音,乐器,音符和持续时间定义。我下载了Riley Apperson的这个版本的Stranger Things主题曲。
可以下载许多音乐格式,但是MXL包含转换为Arduino可以播放的音乐所需的信息。
上面的图片2显示了以PK开头的内容,这是文件被PK Zip压缩后的立即泄漏。
图片3是未压缩的相同文件,包含标准XML格式。
步骤2:MXL文件数据
在数据中有几件事情要看。请记住,我们必须使音符和整体歌曲保持简单,因为没有比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#
我编写了一个用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
-
Arduino
+关注
关注
187文章
6461浏览量
186565
发布评论请先 登录
相关推荐
评论