0%

单片机PWM播放音乐

使用单片机PWM播放音乐

一个偶然的机会,看到一篇文章(即参考中的第一项),觉得挺有意思,想搞一下。而且最近一直在搞比例调节阀的事情,就是使用到了pwm。

1、原理

(1)音调

每一个音调都有一个固定的频率,比如下面这个图:

yokRSA.jpg

只要使PWM的频率与相应的音调频率相同即可,当需要改变音调时,修改pwm周期即可。

(2)音长

四分之一音符、二分之一音符、全音符,通过延时简单处理,这样理解起来比较方便。

(3)音量

控制PWM的输出脉宽。这个值越大,发出的声音越大。当然要想达到理想的效果,还需要功放的帮助。

2、实现

单片机使用lpc2378,pwm输出后直接驱动喇叭发声。另一方面,实际的硬件接口输出电平为5V,喇叭使用12V才比较正常,所以声音输出比较小。

另一个重点就是音乐文件的生成。这个需要查看其它的资料。这里只是直接使用的网上的数据,该数据包含两部分:频率部分、时延部分,分别表示音调与音长。在程序运行时,先设置pwm为某一频率,之后延时对应的时间,然后重新开始下一个频率与延时。

如何查看简谱,可以参考网上的其它一些资料。下面的说明是网上的资料(侵权删)。


简谱说明

yokhOP.png

  1. 左上角的1=C是表示调式(可以不用关心),1是唱名,C是音名,1=C是正调(就是常规的对应关系: 1-C,2-D, 3-E, 4-F, 5-G, 6-A, 7-B);

  2. 左上角的 4/4 是四四拍,是指 四分音符为一拍, 每小节有四拍;

  3. 下面谱子上的竖线就是每个小节分隔符,和4/4对应;

  4. “跑得快”上面5后面的横线表示延时一拍;

  5. “一直没有眼睛”一句,5后面的点表示顺延半拍,一条下划线表示二分之一时间,两条下划线表示四分之一时间;

3、其它

还有另外一个想法,即奈奎斯特定理。对音频采样,只要符合该定理,那么就可以完整地恢复原始的音频。该方法似乎更简单,并不涉及到哪个频率是多少,音长是多少,却可以恢复原始的声音。比如电话,通过某一频率采样,电话的另一端就可以恢复说话人的声音。当然这里面还涉及到采样精度问题。

很自然的产生另外一个想法,是否可以通过频率合成的方式来实现声音的合成的?每一段音乐或者声音,包含不同的频率,每个频率又具有不同的幅度,应该需要一个巨大的运算量。


主要参考

https://zhuanlan.zhihu.com/p/34358127

https://cloud.tencent.com/developer/article/1758279

https://www.cnblogs.com/devymex/p/3389620.html

https://www.cnblogs.com/759222924lele/p/9771260.html

https://mbb.eet-china.com/forum/topic/71081_1_1.html

https://bbs.huaweicloud.com/blogs/203985

https://www.huaweicloud.com/articles/adb4c1f99f28447b35a3e39a209b86a5.html

https://www.technics.com/cn/high-res-audio/what-is-high-resolution-audio.html

https://cloud.tencent.com/developer/article/1656128

https://www.zhihu.com/question/51379187