一个简单的蜂鸣器演奏程序
0x000000002019/07/29软件综合 IP:海南
中文摘要
蜂鸣器音乐
关键词
C语言蜂鸣器

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

       所有的介绍请看视频:XXXXXXXXXXXXXXXXXXXXXXXX/video/av61278998/

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

       本地视频:


混流190729144744.mp4  点击下载


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

来自:计算机科学 / 软件综合
14
1
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
0x00000000 作者
5年5个月前 IP:海南
861572


混流190729212607.mp4  点击下载


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
UIC
5年5个月前 IP:浙江
861573

只能输出正弦吧

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533
5年5个月前 IP:广东
861574

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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Aromatisation
5年5个月前 IP:广东
861625

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

该用MIDI啦

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
0x00000000作者
5年5个月前 IP:海南
861633
引用Aromatisation发表于4楼的内容
挺好的,其实我以前也想过。但是后来因为两个beep之间有间隔,放弃了该用MIDI啦

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

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

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
UIC
5年5个月前 IP:浙江
861634

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

虽然有些违背本意

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ry7740kptv
5年5个月前 IP:山东
861642

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

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Aromatisation
5年5个月前 IP:广东
861648

给lz一点提示:

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

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

参考网站:XXXXXXXXXXXXXXXXXXXXXX

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Aromatisation
5年5个月前 IP:广东
861649
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
0x00000000作者
5年5个月前 IP:海南
861661
引用Aromatisation发表于8楼的内容
给lz一点提示:有一些使用运放的电子琴电路,里面有AM,有颤音,还是正弦波的,用一个LM324就好了...

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

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

1.png


引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
0x00000000作者
5年5个月前 IP:海南
861662

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

1.png


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Ma3.02的守望
5年5个月前 IP:河南
861663

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

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

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

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


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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
0x00000000作者
5年5个月前 IP:海南
861664
引用Ma3.02的守望发表于12楼的内容
以前课程设计做过一个类似小电子琴的东西方案是 : 微动开关->STC单片机->DA->RC滤波->L...

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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Aromatisation
5年5个月前 IP:广东
861666
引用0x00000000发表于10楼的内容
谢谢啦,不过我还是想做成全数控的,这样也比较省事。整体程序框架基本都完成了,用纯ASM编写,满足速度...

我也发现那玩意儿停产了

不过可以用LM566

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

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

所属专业
所属分类
上级专业
同级专业
0x00000000
进士 学者 机友 笔友
文章
75
回复
758
学术分
1
2013/07/27注册,3个月16天前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}