关注我们微信的童鞋可能还记得,昨天我发了一章关于UNO+喇叭就可以播放歌曲的文章。

文章到最后也没有完成整个天空之城歌曲。因为实在是太麻烦了。。于是今天就苦思冥想,想借此机会整理出一个简谱的播放程序。借此来播放所有简谱写成的歌曲。既能提高复用性,也很有趣

那么既然要写库,我们来一步步分析我们要完成的工作吧:1、如何把简谱用程序里的数据表示出来。2、表示出来的数据如何解析。3、解析出来的数据如何播放。

来看看我分解出来的三个问题,可以看到第三个问题非常简单,之前的文章已经解决了这个问题。一个普通的UNO+一个小喇叭+Arduino的tone函数就可以搞定。

一、那么先来解决第一个问题:如何把简谱用程序里的数据表示出来。这里设计到我们如何来设计这个存储数据的结构的问题。一开始我是想兼容现有的乐谱的格式的。现有的乐谱格式倒是有一些,但是却没找到相关的资料,所以也没办法兼容了。所以我只能做一个没办法的办法,自己设计这个数据。Arduino使用的是C++语言,数据处理相比较起高级语言是比较麻烦的,而且芯片本身速度也比较慢,所以我选择的是最简单的方案,用字符串来存储。那么问题来了,我们有哪些数据需要保存?先来看看简谱。

看了谱子眼花缭乱。。。简单介绍下:

数字代表音调 1234567分别代表do re mi fa sol la xi数字下面的点代表下降一个8度数字上面的点代表上升一个8度和数字同样的横线 “-”代表延长数字下方有横线,代表8分音符。2个横线代表16分音符。数字前面的#代表这个音调要升半调。

可以看见乐谱上的信息很多,那么我们要一一记录这些信息,最终我设计的数据是这样的。

举个例子:n61f4,n71f4,n10f34,n71f4,n10f3,n30f3代表以下音符。

n代表没有#号,如果有#,则用s代替。6代表la1f代表6下面有1个点,若上面有一个点则用1s代替4代表这个音符是8分音符1代表全音符

2代表2分音符3代表4分音符4代表8分音符5代表16分音符6代表32分音符可以看见第三个音符后面有个点,这个叫延长符号,及要延长他本身一半的时间,他是一个4分音符,点就代表要延长8分音符的时间。所以f后面有2个数字34,这样即可延长时间。这样就基本把简谱表示出来了。

二、我们再来解决第二个问题解析我们表示的数据。C++解析字符串比较麻烦,所以设计的时候每个音符都用‘,’隔开,这样就方便解析。解析函数如下。

void MELODY::playMelody(char *Melody,int playSpeed){ const char d = " ,"; char p; char cgy[10]; int noteDuration=0; int i,j; uint8_t thisNote1=0,thisNote2=0; p = strtok(Melody,d); sprintf(cgy, "%s", p); while(p) { char note[]="0000000000"; noteDuration=0; for (i=0;(p+i)!='\0';i++){ note=(p+i); } for (int j=4;jdebug) this->serial->println(noteDuration); if (note[]=='n'){ switch (note[1]){ case '1':thisNote1=0; break; case '2':thisNote1=2; break; case '3':thisNote1=4; break; case '4':thisNote1=5; break; case '5':thisNote1=7; break; case '6':thisNote1=9; break; case '7':thisNote1=11; break; } } else if (note[

头文件中,我将每个音对应的频率设置成为一个数组,方便解析。

至此,左右的工作的都完成了,只需要将简谱输入成我刚才的格式就可以播放音乐啦,当然还是比较麻烦,但比上次的效率高了很多,上次2个小时大概输入了1半,这次半个小时就输入了整首歌。

现在附上程序的地址,想要库的可以去下载哦:https://github.com/rainbowyu/LD_ArduinoLib/tree/V1.02如果喜欢观看类似科技新奇事物,以及了解创客圈最新资讯,或者您对Arduino有所耳闻,可以关注我们微信公众号,一定会带给您最新的资讯,最实用的教程,以及创客最新的玩意。

arduino编乐谱_把乐谱播出来,自制简谱播放库相关推荐

  1. 把乐谱播出来,自制Arduino简谱播放库

    昨天我发了一章关于UNO+喇叭就可以播放歌曲的文章. 文章到最后也没有完成整个天空之城歌曲.因为实在是太麻烦了.. 于是今天就苦思冥想,想借此机会整理出一个简谱的播放程序.借此来播放所有简谱写成的歌曲 ...

  2. 用计算机唱歌 丑八怪乐谱,得力计算器乐谱丑八怪 | 手游网游页游攻略大全

    发布时间:2016-06-28 注意:乐谱触发有先后顺序,两个乐谱事件不能同时触发.满足触发条件后,在出自家门时会发生寻找乐谱事件.   1 音階の基礎条件:一年春17日   位置:ダンヒル家床边. ...

  3. Arduino编程之Serial.println()和Serial.print()

    Arduino编程之Serial.println()和Serial.print() Arduino 的输出基本就用两个函数 print 和 println,区别在于后者比前者多了回车换行 Serial ...

  4. java工作流 传智播客_Activiti工作流视频教学(企业开发实战讲解)_传智播客

    Activiti工作流视频教学(企业开发实战讲解)_传智播客课程简介: Activiti工作流视频教学(企业开发实战讲解)_传智播客本教学共分4天进行讲解,本站提供第1天内容在线观看,全集教学请在本站 ...

  5. 计算机音乐谱大全好汉歌,好汉歌民谣简谱

    好汉歌民谣简谱 <好汉歌>是歌手刘欢演唱的一首歌曲,由赵季平作曲编曲,易茗作词.采用在山东.河南.河北等地广为流传的民歌曲调所作而成.下面是小编为大家整理了好汉歌民谣简谱,希望能帮到大家! ...

  6. arduino 长传出错_请问Arduino IDE在编译时正常,却无法上传且显示找无效库是怎么回事?...

    开发板:"Arduino Nano atmega328p" 警告:库 Mozzi 中的分类 'audio' 不可用.设置为 'Uncategorized' 项目使用了 2750 字 ...

  7. 计算机音乐谱大全往后余生,往后余生歌曲简谱抖音神曲在线欣赏

    <往后余生>是抖音上很火的一首歌曲,第一次听到的时候,不痛不痒,再次循环播放几回,我们竟泪流满面.身兼词作者.曲作者和演唱者的马良说:愿你都能以梦为马,不负此生.接下来就和小编一起来看欣赏 ...

  8. 一起卷吧,arduino/mixly语音识别模块,10元,可以自定义,提供自制的mixly库

    一.效果演示 制作的语音风扇演示一起卷吧!语音识别,10元,串口通信,arduino可用,提供自制的mixly库,操作简单,可以语音播报_哔哩哔哩_bilibili 制作的语音灯演示https://w ...

  9. animation基础练习源码_用vue简单写一个音乐播放组件「附源码」

    作者:vipbic 转发链接:https://segmentfault.com/a/1190000022980992 前言 上次小编也分享一个关于Vue 开发过音乐播放对项目: 基于 electron ...

最新文章

  1. matlab矢量相乘并打印显示
  2. 定时器中断实验 编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。
  3. Q绑查询html单页源码 自带接口
  4. HALCON 21.11:深度学习笔记---模型(8)
  5. Java菜鸟学习笔记--面向对象篇(十八):对象转型多态
  6. 【GitHub】cmder下载地址
  7. 虚拟机中标麒麟的网络设置
  8. 路由器安装教程和使用方法
  9. 加权平均数的例子_加权平均数怎么算?举个具体的例子
  10. 最优投资组合--马科维茨投资组合理论
  11. IT行业可以做什么副业?
  12. vue滑杆_非常简单的Vue滑杆组件
  13. [C#入门] 函数 | 方法
  14. Android手机听筒和扬声器切换
  15. 复现SCRDet:Towards More Robust Detection for Small, Cluttered and Rotated Objects(ICCV2019)遇到的问题及解决方案
  16. 七牛云上传视频并转码
  17. 计算机二级考试中Excel函数如何应用,计算机二级考试excle常用函数【计算机二级ms office中excel中必考函数有哪些?】...
  18. 可汗学院学习总结(一)
  19. 天润融通网络电话配置手册
  20. 菜鸟学习OGRE和天龙八部之五: 水面TerrainLiquid基本搞定

热门文章

  1. 机器学习 - 计算 Log-Sum-Exp
  2. 工作十年以后,你们悟出了什么职场道理?
  3. 苹果发布 iOS14.3 准正式版,是否升级的建议
  4. jy-04-JAVASE02——HTTP
  5. excel透视表计数去重_Excel数据透视表中的唯一计数
  6. 数据结构(C语言第二版)严蔚敏编,数据结构电子教材,线性表,栈,队列,顺序存储结构,初始化,入栈,出栈,入队,出队,c++
  7. CocosCreator 事件阻挡和事件穿透
  8. 使用lodop实现web精确套打
  9. macd最有效的参数
  10. 《白帽子讲Web安全》读后感 —— 对道哥的致敬