没啥值得说的,就是一点要注意,Windows7以后,蜂鸣器函数只能通过声卡输出了,并非主板的蜂鸣器。也许这样音质变好了,但是弹奏速度受限了,速度快了就会因为响应不过来导致丢失音调。
所有的介绍请看视频:XXXXXXXXXXXXXXXXXXXXXXXX/video/av61278998/
工程文件以及程序:
本地视频:
混流190729144744.mp4 点击下载
[修改于 5年5个月前 - 2019/07/29 22:16:49]
9102年了,这种东西应该直接调用MIDI的API
挺好的,其实我以前也想过。但是后来因为两个beep之间有间隔,放弃了
该用MIDI啦
引用Aromatisation发表于4楼的内容挺好的,其实我以前也想过。但是后来因为两个beep之间有间隔,放弃了该用MIDI啦
MIDI首先要有音源库和相应的合成算法没错吧,程序调用API向其发送控制命令,然后接下来就是API的工作了。
但是在MCU上你咋搞?首先MCU的内存放波表库就够呛,就算是放到外部存储器,再运行合成算法,但是处理性能就不行了。这个东西我本来是打算在MCU上实现的,用STC那种具有56KB的code memory型号有空间放置歌曲,做一个类似音乐盒的东西。所以先用PC机试试效果和一些想法。说真的,我觉得我可以在MCU上做到跟PC机一个效果,PC机是正弦波输出的,一般的MCU驱动蜂鸣器都是直接使用定时器的方波脉冲驱动的。而我是打算使用DDS的原理,在MCU上开辟一大片正弦波表,然后按一定步进查表合成各种频率,然后再进行AM调制模拟敲击音符从最大缓慢衰减的过程。
先将beep转换到wav里再播放就不会有间隙啦
虽然有些违背本意
不知道当年的波表合成器芯片是外置ROM还是内置,不过那会FM合成挺多的,只需要一些预设参数就能响了。
给lz一点提示:
有一些使用运放的电子琴电路,里面有AM,有颤音,还是正弦波的,用一个LM324就好了
单片机输出模拟信号给运放决定频率,或者用数字电位器之类的,还可以用vco
引用Aromatisation发表于8楼的内容给lz一点提示:有一些使用运放的电子琴电路,里面有AM,有颤音,还是正弦波的,用一个LM324就好了...
谢谢啦,不过我还是想做成全数控的,这样也比较省事。整体程序框架基本都完成了,用纯ASM编写,满足速度要求。正好利用完全MCU的性能,如果外置合成器你会发现MCU一大半时间都在跑空循环或者休眠,这不是期望的事。
不过你说的那个正弦波VCO我倒想看看,可惜Datasheet没有,估计停产了。
不到1k的指令,99以上是正弦波表数据。不过感觉统调困难,毕竟STC没有在线调试功能,会让人想死。
以前课程设计做过一个类似小电子琴的东西
方案是 : 微动开关->STC单片机->DA->RC滤波->LM386->无源蜂鸣器
MCU内存一个正弦表,定时器触发把正弦表数据循环送入DA。不同琴键按下,对应不同的定时器频率,发出对应频率的声音。
还可以有播放预置歌曲的功能:存一个表示歌曲信息的数组,数组从头到尾以固定的时间间隔存放不同时刻的频率信息,再循环放出来就成曲子了。(当然同时只能有一个调,没法表现混音哈)
若只用IO口产生PWM,直接驱动蜂鸣器应当同样可行,可以省掉大量元件。不过STC单片机的定时器性能不够,频率分辨率比较差。
以前课程设计做过一个类似小电子琴的东西方案是 : 微动开关->STC单片机->DA->RC滤波->L...
是的,不过如果用方波驱动扬声器会比较生硬,不好听,所以使用正弦波输出。至于混音不是不行。如果MCU性能足够,完全可以设置多个指针,按照固定步进的不同倍数去查正弦表,然后再把结果系数加权输出也一样可以实现多谐波输出。
引用0x00000000发表于10楼的内容谢谢啦,不过我还是想做成全数控的,这样也比较省事。整体程序框架基本都完成了,用纯ASM编写,满足速度...
我也发现那玩意儿停产了
不过可以用LM566
200字以内,仅用于支线交流,主线讨论请采用回复功能。