找回密码
 立即注册
查看: 1667|回复: 33

捣鼓51音频的小心得

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-9-30 21:28:25 来自手机 | 显示全部楼层 |阅读模式
陆陆续续捣鼓了好一段音频,不为别的,就为了好玩。
从调通例程里的“播放8bitwav”的,到简易wav播放器,
录音机,扩音机,变声器,再到现在正在搞的wifi音频传输,
摸索前进的同时也收获了不少,就此分享出来支持一波8051音频,
给想玩这方面的同志避避险,踩踩雷。
一下内容纯属个人观点---
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-10-1 08:04:36 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-9-30 21:33:30 | 显示全部楼层
本帖最后由 DebugLab 于 2024-10-1 13:02 编辑

好玩
DebugLab
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-9-30 21:44:06 来自手机 | 显示全部楼层
玩腻了蜂鸣音乐?下一步,就可以搞搞dac了。
这里的dac可以是t型电阻网
--如果你用的还是89系列老古董--你喜欢了话也不是不可以。
本人还是推荐跟紧时代潮流,直接走上1T8051的快车道,
用8h8k64u(当时的最新款,现在当然是首选8051u了)。
充分享受它的pwm,大ram和高主频


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-9-30 21:51:57 来自手机 | 显示全部楼层
当你玩熟了定时器中断,并弄会了最最基础的pwm,就可以打开8h8k64u官方例程,找到“播放8bitwav”项目了。
这个程序是播放pwm音频的小demo,把一段6秒的音频数据放在代码里,用pwm和定时器中断给播出来。
通过这个程序你就不难理解pwm播放音乐的核心原理了:不断读取音频数据,按照音乐的采样率,每隔一小段时间,在中断里用播放一个采样点(对应输出一个模拟电压值)。
“没有情人的情人节”独特的8bit音调立刻使蜂鸣音乐黯然失色
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-9-30 22:01:59 来自手机 | 显示全部楼层
玩明白了例程,那就可以播放其他储存介质里的音频了。
用定时器产生中断,在里面把采样点给pwm出来,不论你播放什么储存介质里的音乐,这步都丢不了,固定套路。问题在于,读取音频数据。
为了让播放不卡顿,你的读取要能跟得上你的输出。例程里因为是播放芯片flash中的音乐,就不用考虑读取速度,更不用搞什么缓冲,读一个字节,就放一个字节,不急不慢。但你要是播放spiflash里的数据,这样就不行,你必须得缓冲,还得双缓冲(在播放一个缓冲区的同时,赶紧填充另一个缓冲区,彼此交替),不然你的音乐就会卡出电音,甚至直接间断播放
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-9-30 22:14:46 来自手机 | 显示全部楼层
双缓冲的代码很简单,在这里就不详细展开了。后边分享的程序里就有,固定套路,也贯穿51音频得始终。
如果你用了文件系统了话,速度方面你需要格外小心。因为你的物理读取速度在套上个文件系统之后会狠狠的打上一折。是时候考验你的文件系统方案够不够格了。如果你播放spiflash里的wav,恰好用的还是fatfs了话,温馨提示你的ram和rom可能会不够,
(别忘了你读spiflash了话可是要开4096的超大缓冲区的,而且即便裁剪阉割编译出来也得动辄10几k,阉割完性能还发挥的不好。当时我用fatfs试了,播44k8bitwave竟然会卡。。)
总之,小心,小心呐!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-9-30 22:20:10 来自手机 | 显示全部楼层
软件功夫做足了,默认的是你的硬件加速都用好了。卡顿之时,先问问自己hspi用了吗,2T上了吗?dma开了吗?
关于速度,最后就是想说一点:sd卡比spiflash快很多!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-9-30 22:23:00 来自手机 | 显示全部楼层
把例程削微改改,不用什么文件系统,就加个双缓冲来读spiflash里的数据直接放,这是最容易迈出的一步。。。诶,等等,你的音乐是怎么放进flash里的?!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-9-30 22:26:59 来自手机 | 显示全部楼层
这个也得说一下,就是spiflash的基本操作默认你是熟悉的。8h8k64u了话我是让它运行一个usbmsc程序(例程里有,msc范例,底层读写函数稍微改改就好了),把flash模拟成一个磁盘,连电脑再用winhex往里写数据。

当然在今天我那个方法可能也落伍了,因为stcisp好像新出了一个flash编程器,还没用过,但看样子比我那个好使多了,建议大家尝尝鲜。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-9-30 22:29:14 来自手机 | 显示全部楼层
Wav文件写进去之后,它里边怎么都是一堆十六进制数字啊,哪些是采样点?按什么顺序存的?每个数字都是音频数据吗。。。
Wav文件的结构,你是得了解的。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:30 , Processed in 0.141622 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表