OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3778|回复: 13

WM8978单曲循环播放问题咨询

[复制链接]

19

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
792
金钱
792
注册时间
2013-9-29
在线时间
178 小时
发表于 2020-10-12 09:50:15 | 显示全部楼层 |阅读模式
1金钱
WM8978单曲循环的功能,我播放的WAV文件是一段正弦波,每次播放完成后,例程里是不是都要重新解析一下此WAV文件?整个解析过程大约60ms,这就导致我在循环播放此正弦波文件时,在一次播放完成到下次开始播放,会有个60ms左右的空白,引入了噪声,如何解决这个问题呢?

最佳答案

查看完整内容[请看2#楼]

我曾经还这么搞过,先获取关键参数,然后把音乐文件以二进制形式写到外挂的flash中,不用文件系统,直接读按顺序读flash往解码芯片扔
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

37

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2016-9-10
在线时间
308 小时
发表于 2020-10-12 09:50:16 | 显示全部楼层
zkyzhh 发表于 2020-10-13 14:37
尝试了,还是不行,主要问题在于文件操作那里,执行文件操作需要时间,导致数据不连续。

我曾经还这么搞过,先获取关键参数,然后把音乐文件以二进制形式写到外挂的flash中,不用文件系统,直接读按顺序读flash往解码芯片扔
回复

使用道具 举报

37

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2016-9-10
在线时间
308 小时
发表于 2020-10-12 12:01:35 | 显示全部楼层
你是想循环播放一段固定的WAV文件吗?如果是这样,先把解析后的关键参数串口打印出来,然后把解析的函数去掉,直接填上固定参数
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2020-10-12 13:11:32 | 显示全部楼层
放到内存里面呢,前提是内存足够大
回复

使用道具 举报

19

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
792
金钱
792
注册时间
2013-9-29
在线时间
178 小时
 楼主| 发表于 2020-10-13 09:22:02 | 显示全部楼层
1491430114 发表于 2020-10-12 12:01
你是想循环播放一段固定的WAV文件吗?如果是这样,先把解析后的关键参数串口打印出来,然后把解析的函数去 ...

是想循环播放一段固定的WAV,解析的关键参数是指的哪些呢?解析的函数是指的WAV文件解析函数吗?
回复

使用道具 举报

19

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
792
金钱
792
注册时间
2013-9-29
在线时间
178 小时
 楼主| 发表于 2020-10-13 09:23:32 | 显示全部楼层
三叶草 发表于 2020-10-12 13:11
放到内存里面呢,前提是内存足够大

WAV文件有20M了,以后也可能会播放更大的文件,这种方法我考虑过,有点不太可行。
回复

使用道具 举报

37

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2016-9-10
在线时间
308 小时
发表于 2020-10-13 09:40:39 | 显示全部楼层
zkyzhh 发表于 2020-10-13 09:22
是想循环播放一段固定的WAV,解析的关键参数是指的哪些呢?解析的函数是指的WAV文件解析函数吗?

解析函数:
u8 wav_decode_init(u8* fname,__wavctrl* wavx);
关键参数:
typedef __packed struct
{
    u16 audioformat;                        //音频格式;0X01,表示线性PCM;0X11表示IMA ADPCM
        u16 nchannels;                                //通道数量;1,表示单声道;2,表示双声道;
        u16 blockalign;                                //块对齐(字节);  
        u32 datasize;                                //WAV数据大小

    u32 totsec ;                                //整首歌时长,单位:秒
    u32 cursec ;                                //当前播放时长
       
    u32 bitrate;                                   //比特率(位速)
        u32 samplerate;                                //采样率
        u16 bps;                                        //位数,比如16bit,24bit,32bit
       
        u32 datastart;                                //数据帧开始的位置(在文件里面的偏移)
}__wavctrl;
回复

使用道具 举报

19

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
792
金钱
792
注册时间
2013-9-29
在线时间
178 小时
 楼主| 发表于 2020-10-13 14:37:31 | 显示全部楼层
1491430114 发表于 2020-10-13 09:40
解析函数:
u8 wav_decode_init(u8* fname,__wavctrl* wavx);
关键参数:

尝试了,还是不行,主要问题在于文件操作那里,执行文件操作需要时间,导致数据不连续。
回复

使用道具 举报

19

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
792
金钱
792
注册时间
2013-9-29
在线时间
178 小时
 楼主| 发表于 2020-10-13 15:04:53 | 显示全部楼层
1491430114 发表于 2020-10-13 14:54
我曾经还这么搞过,先获取关键参数,然后把音乐文件以二进制形式写到外挂的flash中,不用文件系统,直接 ...

好的,谢谢你
回复

使用道具 举报

19

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
792
金钱
792
注册时间
2013-9-29
在线时间
178 小时
 楼主| 发表于 2020-10-14 09:59:54 | 显示全部楼层
1491430114 发表于 2020-10-13 14:54
我曾经还这么搞过,先获取关键参数,然后把音乐文件以二进制形式写到外挂的flash中,不用文件系统,直接 ...

放到SDRAM了,可行,按照30M的存储空间,44.1k采样率16位数据,大约可以存5分56秒数据
回复

使用道具 举报

37

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2016-9-10
在线时间
308 小时
发表于 2020-10-14 15:00:51 | 显示全部楼层
zkyzhh 发表于 2020-10-14 09:59
放到SDRAM了,可行,按照30M的存储空间,44.1k采样率16位数据,大约可以存5分56秒数据

要用SDRAM得429吧,外挂flash用103就行,音频数据也不需要那么高的速度
回复

使用道具 举报

19

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
792
金钱
792
注册时间
2013-9-29
在线时间
178 小时
 楼主| 发表于 2020-10-15 09:05:15 | 显示全部楼层
1491430114 发表于 2020-10-14 15:00
要用SDRAM得429吧,外挂flash用103就行,音频数据也不需要那么高的速度

嗯,用的429,STM32有没有什么方法可以达到192k以上的采样率?
回复

使用道具 举报

37

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2016-9-10
在线时间
308 小时
发表于 2020-10-15 09:26:41 | 显示全部楼层
zkyzhh 发表于 2020-10-15 09:05
嗯,用的429,STM32有没有什么方法可以达到192k以上的采样率?

没试过,单片机还搞那么高采样率的干啥
回复

使用道具 举报

19

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
792
金钱
792
注册时间
2013-9-29
在线时间
178 小时
 楼主| 发表于 2020-10-16 08:09:51 | 显示全部楼层
1491430114 发表于 2020-10-15 09:26
没试过,单片机还搞那么高采样率的干啥

采样率达到768k,一般采用什么处理器?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-29 23:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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