搜索
bottom↓
回复: 16

stm32播放wav,怎么能流畅播放?

[复制链接]

出0入0汤圆

发表于 2017-9-29 17:48:31 | 显示全部楼层 |阅读模式
本帖最后由 hlmkhqpost 于 2017-9-29 17:50 编辑

目前wav数据,写在spi flash中,播放时按1k大小,从flash中读出,通过dma传到dac,去播放,会哒哒声,应该是传输一次就发出哒哒声一次,wav的原始声音是挺流畅的。
如果一次读取完整wav数据,放mem中,播放,就不会有此哒哒声。
各位高人,这种情况怎么调整?
使用stm32f0平台。只有16kram,太大的缓冲也不好整呀。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入54汤圆

发表于 2017-9-29 17:58:48 | 显示全部楼层
播放1K时间是多少,读取1K时间是多少,测试过吗?
如果读取大于播放时间,无解...

出0入0汤圆

 楼主| 发表于 2017-9-29 18:22:55 | 显示全部楼层
lusson 发表于 2017-9-29 17:58
播放1K时间是多少,读取1K时间是多少,测试过吗?
如果读取大于播放时间,无解... ...

还没算,缓冲扩大到4k,会减少很多。

出0入0汤圆

 楼主| 发表于 2017-9-29 18:23:44 | 显示全部楼层
原来是16bit采样,改成8bit,也会好些

出0入90汤圆

发表于 2017-9-29 18:55:18 | 显示全部楼层
用双缓冲

出0入0汤圆

发表于 2017-9-29 20:32:01 | 显示全部楼层
滴滴的2中可能,
1,播放频率不对,这个需要有定时器最好精准的延时,44.1k的我试过 ,播放效果和手机播放没任何区别,用的stm32DAC 读数据用的fatfs单纯放音乐用了6-7k ram,
2另外一个就是你解码不对 ,解码是有负数的,好像最高位是一个符号位.

出100入101汤圆

发表于 2017-9-29 21:28:55 | 显示全部楼层
蜗牛蜗牛 发表于 2017-9-29 20:32
滴滴的2中可能,
1,播放频率不对,这个需要有定时器最好精准的延时,44.1k的我试过 ,播放效果和手机播放没任何 ...

按lz的描述,貌似是一段数据播放完,切换到下一段后有个滴答停顿

出0入0汤圆

发表于 2017-9-29 22:10:21 | 显示全部楼层
fengyunyu 发表于 2017-9-29 21:28
按lz的描述,貌似是一段数据播放完,切换到下一段后有个滴答停顿

切换下一段要关定时器,然后再开

出0入0汤圆

发表于 2017-9-29 23:46:37 | 显示全部楼层
以前我也遇到过,后来没解决,就一直放着了。

出0入0汤圆

发表于 2017-9-30 00:45:16 | 显示全部楼层
F0是12bitDAC吗?把16bit数据右移4下试一下有改变没有

出0入4汤圆

发表于 2017-9-30 08:23:04 | 显示全部楼层
双缓冲.  DMA有全空/半空的中断, 利用这两个中断轮流填充前后buff.  4K的buff读取2ms, 可以播放100ms左右, 足够了. 我的程序还做了ADPCM解压, 播放很流畅的

出0入0汤圆

发表于 2017-9-30 08:25:26 | 显示全部楼层
哒哒哒 哒哒哒 你需要一台加特林

出0入0汤圆

发表于 2017-9-30 08:33:24 | 显示全部楼层
这东西论坛例程多了去了。

dac播8bit wav没问题

出0入0汤圆

 楼主| 发表于 2017-9-30 08:33:36 | 显示全部楼层
本帖最后由 hlmkhqpost 于 2017-9-30 08:58 编辑

多谢各位,就是每次重新传时会断,也管理timer6,没用,用了双缓冲,再细化下,
先试试,争取把加特林加上消音器

出0入0汤圆

发表于 2017-9-30 09:30:08 | 显示全部楼层
16位数据不能直接右移4位dma给dac吧,16位数据是有符号的,先转成无符号数据,再右移4位。

出0入362汤圆

发表于 2017-9-30 10:09:59 | 显示全部楼层
软件实现个简单的fifo...
缓冲有256字节就够了

参考elm-chan这个,用一片8脚的attiny85, 8k flash, 512字节ram, 实现流畅播放wav.
http://elm-chan.org/works/sd8p/report.html

出0入0汤圆

发表于 2017-9-30 13:46:11 | 显示全部楼层
楼主遇到的这些问题,之前我基本都遇到过,基本解决思路就是利用双缓冲,使用队列引擎,借助DMA,消除生产与消费的矛盾,总结一下,软件手法可解决。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-2 01:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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