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