一个简单的蜂鸣器演奏程序
中文摘要
蜂鸣器音乐
关键词
C语言蜂鸣器

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

       所有的介绍请看视频:https://www.bilibili.com/video/av61278998/

       工程文件以及程序:

ConsoleApplication5.7z
19.0k
7Z
22次下载

       本地视频:



[修改于 3 个月前 - 2019-07-29 22:16:49]

来自 快乐DIYWindows
1
2019-7-29 22:20:48
0x00000000(作者)
1楼



折叠评论
加载评论中,请稍候...
折叠评论
2楼

只能输出正弦吧

折叠评论
加载评论中,请稍候...
折叠评论
3楼

9102年了,这种东西应该直接调用MIDI的API

折叠评论
加载评论中,请稍候...
折叠评论
2019-07-31 14:17:30
2019-7-31 14:17:30
4楼

挺好的,其实我以前也想过。但是后来因为两个beep之间有间隔,放弃了

该用MIDI啦

折叠评论
加载评论中,请稍候...
折叠评论
0x00000000(作者)
5楼
引用 Johnsons 发表于 4 楼的内容:
挺好的,其实我以前也想过。但是后来因为两个beep之间有间隔,放弃了该用MIDI啦

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

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

折叠评论
1
加载评论中,请稍候...
折叠评论
6楼

先将beep转换到wav里再播放就不会有间隙啦

虽然有些违背本意

折叠评论
1
加载评论中,请稍候...
折叠评论
7楼

不知道当年的波表合成器芯片是外置ROM还是内置,不过那会FM合成挺多的,只需要一些预设参数就能响了。

折叠评论
1
加载评论中,请稍候...
折叠评论
8楼

给lz一点提示:

有一些使用运放的电子琴电路,里面有AM,有颤音,还是正弦波的,用一个LM324就好了

单片机输出模拟信号给运放决定频率,或者用数字电位器之类的,还可以用vco

参考网站:www.dianziaihaozhe.com

折叠评论
加载评论中,请稍候...
折叠评论
9楼
折叠评论
加载评论中,请稍候...
折叠评论
2019-08-01 09:01:35
0x00000000(作者)
10楼
引用 Johnsons 发表于 8 楼的内容:
给lz一点提示:有一些使用运放的电子琴电路,里面有AM,有颤音,还是正弦波的,用一个LM324就好了.....

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

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

1.PNG


折叠评论
1
加载评论中,请稍候...
折叠评论
0x00000000(作者)
11楼

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

1.PNG


折叠评论
加载评论中,请稍候...
折叠评论
12楼

以前课程设计做过一个类似小电子琴的东西

方案是 : 微动开关->STC单片机->DA->RC滤波->LM386->无源蜂鸣器

MCU内存一个正弦表,定时器触发把正弦表数据循环送入DA。不同琴键按下,对应不同的定时器频率,发出对应频率的声音。

还可以有播放预置歌曲的功能:存一个表示歌曲信息的数组,数组从头到尾以固定的时间间隔存放不同时刻的频率信息,再循环放出来就成曲子了。(当然同时只能有一个调,没法表现混音哈)


若只用IO口产生PWM,直接驱动蜂鸣器应当同样可行,可以省掉大量元件。不过STC单片机的定时器性能不够,频率分辨率比较差。

折叠评论
加载评论中,请稍候...
折叠评论
0x00000000(作者)
13楼
引用 Ma3.02的守望 发表于 12 楼的内容:
以前课程设计做过一个类似小电子琴的东西方案是 : 微动开关->STC单片机->DA-&g.....

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

折叠评论
加载评论中,请稍候...
折叠评论
14楼
引用 0x00000000 发表于 10 楼的内容:
谢谢啦,不过我还是想做成全数控的,这样也比较省事。整体程序框架基本都完成了,用纯ASM编写,满足速度.....

我也发现那玩意儿停产了

不过可以用LM566

折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
ID:{{user.uid}}
{{user.username}}
{{user.info.certsName}}
{{user.description}}
{{format("YYYY/MM/DD", user.toc)}}注册,{{fromNow(user.tlv)}}活动
{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png