文号
861568
阅读
26154
回复
14
收藏
7
一个简单的蜂鸣器演奏程序
2019/07/29
IP:海南
摘要:蜂鸣器音乐
关键词:C语言,蜂鸣器

       没啥值得说的,就是一点要注意,Windows7以后,蜂鸣器函数只能通过声卡输出了,并非主板的蜂鸣器。也许这样音质变好了,但是弹奏速度受限了,速度快了就会因为响应不过来导致丢失音调。

       所有的介绍请看视频:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

       工程文件以及程序: attachment icon ConsoleApplication5.7z 18.97KB 7Z 136次下载

       本地视频:


混流190729144744.mp4  点击下载


[ 修改于7年4个月前 - 2019/07/29 22:16:49 ]
0x00000000作者
7年4个月前IP:海南
861572
1楼


混流190729212607.mp4  点击下载


引用
评论
0x00000000作者
7年4个月前IP:海南
861633
5楼
引用Aromatisation发表于4楼的内容
挺好的,其实我以前也想过。但是后来因为两个beep之间有间隔,放弃了该用MIDI啦

MIDI首先要有音源库和相应的合成算法没错吧,程序调用API向其发送控制命令,然后接下来就是API的工作了。

但是在MCU上你咋搞?首先MCU的内存放波表库就够呛,就算是放到外部存储器,再运行合成算法,但是处理性能就不行了。这个东西我本来是打算在MCU上实现的,用STC那种具有56KB的code memory型号有空间放置歌曲,做一个类似音乐盒的东西。所以先用PC机试试效果和一些想法。说真的,我觉得我可以在MCU上做到跟PC机一个效果,PC机是正弦波输出的,一般的MCU驱动蜂鸣器都是直接使用定时器的方波脉冲驱动的。而我是打算使用DDS的原理,在MCU上开辟一大片正弦波表,然后按一定步进查表合成各种频率,然后再进行AM调制模拟敲击音符从最大缓慢衰减的过程。

引用
评论
1
0x00000000作者
7年4个月前IP:海南
861661
10楼
引用Aromatisation发表于8楼的内容
给lz一点提示:有一些使用运放的电子琴电路,里面有AM,有颤音,还是正弦波的,用一个LM324就好了单片机输出模拟信号给运放决定频率,或者用数字电位器之类的,还可以用vco参考网站:www.dianz...

谢谢啦,不过我还是想做成全数控的,这样也比较省事。整体程序框架基本都完成了,用纯ASM编写,满足速度要求。正好利用完全MCU的性能,如果外置合成器你会发现MCU一大半时间都在跑空循环或者休眠,这不是期望的事。

不过你说的那个正弦波VCO我倒想看看,可惜Datasheet没有,估计停产了。

1.png


引用
评论
1
0x00000000作者
7年4个月前IP:海南
861662
11楼

不到1k的指令,99以上是正弦波表数据。不过感觉统调困难,毕竟STC没有在线调试功能,会让人想死。

1.png


引用
评论
0x00000000作者
7年4个月前IP:海南
861664
13楼
引用Ma3.02的守望发表于12楼的内容
以前课程设计做过一个类似小电子琴的东西方案是 : 微动开关->STC单片机->DA->RC滤波->LM386->无源蜂鸣器MCU内存一个正弦表,定时器触发把正弦表数据循环送入DA。不同琴键按下,对应不...

是的,不过如果用方波驱动扬声器会比较生硬,不好听,所以使用正弦波输出。至于混音不是不行。如果MCU性能足够,完全可以设置多个指针,按照固定步进的不同倍数去查正弦表,然后再把结果系数加权输出也一样可以实现多谐波输出。

引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的