OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5167|回复: 7

基于STM32的简易合成器,让你的蜂鸣器音乐更好听

[复制链接]

8

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2018-12-21
在线时间
126 小时
发表于 2020-7-29 10:36:01 | 显示全部楼层 |阅读模式
本帖最后由 0x00000000 于 2020-7-30 11:26 编辑

       一般的作品中使用蜂鸣器演奏音乐其实很简单粗暴,模拟或者硬件PWM输出方波驱动即可,这样虽然达到目的,但是音色比较刺耳且单一,音效也比较单调。这种发声方式其实就是一种声音合成的过程,如果我们以此更近一步的话,世界就大不同了。计算机刚出现不久的时候,那时的声卡可不同于现在,功能强大。恰恰相反,连播放真实录音的能力都没有,而是通过内置相关硬件,配合软件,程序需要播出某个声音是需要向声卡输入特定参数由声卡自行做声音合成的。声音合成的算法一般是FM合成,使用简单的几个振荡器做特定级联,即可输出非常复杂的声音。本项目就是使用早期声卡的合成方式对音乐进行演奏,输出非常丰富的声音。
      本项目实现了一个运行在STM32F1系列MCU平台上的简易的音调合成器系统,经过对该系统进行简单编程即可实现多首曲子的播放以及播放音色的调整。该系统能实现数十种音色的模拟合成并支持预置多达10余种音色以供使用,以及对每个合成出来的特定音调的属性进行相对精细的控制,例如持续时间,响度,颤音等。系统支持的音域也较为宽广,理论可达C2-C6,但受限于合成算法的限制以及音色本身属性的影响,某个特定音色不一定能够在系统理论支持的音域内始终保持听感和谐。
       本系统由两大部分组成:一是运行在MCU内部的合成器算法库,负责最终的音调合成工作,是本系统的核心;二是参数查找表生成器用于给用户提供一个辅助的手段便于合成器的各项参数设置。为了播放一首曲子,应该进行的工作描述如下:首先先为该曲子选择合适的音色,如果没有应该首先创建一个或者若干个预置的音色,将该音色的描述参数通过参数查找表生成器转换成查找表后即可复制到MCU工程源文件中以待编译;随后将该曲子的简谱通过上述的参数查找表生成器生成曲谱查找表并同样复制到合适的源文件里;最后重新编译工程生成可执行映像并烧入目标板,即可触发播放,并根据实际效果做合适的参数调整并重复上述过程。
      系统使用了题述的加法合成已经调频合成的原理进行每一个音调的生成。算法架构中包含一个12次的谐波发生累加器以及两个独立的单频振荡器用于对每一次谐波进行单独调制。

      这是该项目的实验效果及原理概述:https://www.bilibili.com/video/BV1TK4y1v7x2/
      工程及资源文件: Desktop.zip (173.85 KB, 下载次数: 91)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2018-12-21
在线时间
126 小时
 楼主| 发表于 2020-7-29 10:40:17 | 显示全部楼层
值得一提的是本项目中STM32F103已经突破了极限,频率跑到了135.4752MHz连续运行若干天未出现异常。根据测试更高的频率下内核和其它外设基本不出错,由于FLASH读取速度拉跨会导致取指错误导致系统进入HardFault。根据ARM的设计Cortex-M3应该可以跑150MHz,所以如果把代码放到RAM运行有可能可以让它跑150MHz。所以结论是F1系列FLASH太垃圾,所以才有F2的出现吧?Cortex-M3的性能其实还可以,要是能跑150MHz加上0等待的FLASH应该能干更多事。
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-7-29
在线时间
3 小时
发表于 2020-7-29 10:42:58 | 显示全部楼层
试一下,谢谢lz
回复 支持 反对

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2015-7-26
在线时间
13 小时
发表于 2020-7-30 10:35:06 | 显示全部楼层
0x00000000 发表于 2020-7-29 10:40
值得一提的是本项目中STM32F103已经突破了极限,频率跑到了135.4752MHz连续运行若干天未出现异常。根据测试 ...

我们的M3跑了180M,不过不是ST的
回复 支持 反对

使用道具 举报

8

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2018-12-21
在线时间
126 小时
 楼主| 发表于 2020-7-30 11:23:52 | 显示全部楼层
xiaotianst 发表于 2020-7-30 10:35
我们的M3跑了180M,不过不是ST的

据说Cortex-M3有两个版本,一个极限150MHz,一个300MHz。
实际上就目前看,内核频率不是上不去,好多MCU其实短板都在FLASH,速度快它跟不上就要出错。反正ST的FLASH真的拉跨。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2020-8-9
在线时间
2 小时
发表于 2020-8-12 23:28:37 | 显示全部楼层
在学定时器部分,学习一下,谢谢楼主分享。
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2020-8-13 11:07:52 | 显示全部楼层
全部.S 厉害.
回复 支持 反对

使用道具 举报

34

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
857
金钱
857
注册时间
2018-9-16
在线时间
240 小时
发表于 2020-10-30 22:53:25 | 显示全部楼层
楼主,请问一下你这个工程用keil5打开后都是.s 文件,怎么看啊,不应该是.c文件吗? 而且编译也编不了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-22 21:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表