OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 242|回复: 5

VS1053播放杂音

[复制链接]

  离线 

7

主题

22

帖子

0

精华

新手上路

Rank: 1

积分
40
金钱
40
注册时间
2017-7-17
在线时间
18 小时
发表于 2017-12-15 16:00:01 | 显示全部楼层 |阅读模式
15金钱
原子哥,是这样子的。我仿照你们的音乐播放器例程写了个程序,但是我是把音乐文件下载到W25Q128里面,然后没有用FATS,而是直接从W25Q128里面读取音乐文件发送到VS1053的。音乐可以播放,但是就是播放MP3时中间会不间断常出现GUGU或JIOJIO的声音,每次出现的地方和声音都一样,不是随机的。播放WAV就更惨了,好多收音机收不到台那种沙沙的背景声音。这个跟VS1053的设置有没有关系呀,还是说程序上需要有什么改进的呀?下面是我播放音乐的代码,原子哥根据经验帮我分析下可能是什么原因呀?

int audio_play(uint8_t num)
{
        uint8_t         *databuf;
        uint8_t         temp,i;
        uint32_t         datacount,datasize;
       
        //分配一个缓冲区
        databuf=(uint8_t*)malloc(4096*sizeof(uint8_t));
        if(databuf==NULL) return -1;
       
        //检测指定文件是否存在(一个文件占用1M空间)
        W25QXX_Read(&temp,SOUNDSTART+num*16*0x10000,1);
        if(temp!=0xaa) return -2;
        //读出文件大小信息(4个字节的空间保存文件大小)
        datasize=0;
        for(i=0;i<4;i++)
        {
                W25QXX_Read(&temp,SOUNDSTART+num*16*0x10000+i+1,1);
                datasize<<=8;
                datasize|=temp;
        }
       
        //进行复位
        VS_HD_Reset();
        VS_Soft_Reset();
        //重启播放
        VS_Restart_Play();
       
        //设置音量等信息
        VS_Set_All();
        //复位解码时间
        VS_Reset_DecodeTime();
        //设置VS1053高速发送数据
        VS_SPI_SpeedHigh();
        //关闭功放
        VS_SPK_Set(0);
       
        //将文件按照4096字节大小复制到缓冲区中
        datacount=0;
        while(1)
        {
                //如果剩余文件超过4096字节,则复制4096字节的音频数据出来
                if((datasize-datacount)>=4096)
                {
                        memset(databuf,0,4096);
                        W25QXX_Read(databuf,SOUNDSTART+num*16*0x10000+5+datacount,4096);
                        datacount+=4096;
                        //播放音频数据流
                        for(i=0;i<128;i++)//播放4096字节的音频数据
                        {                       
                                VS_Send_MusicData(databuf+i*32);
                        }
                        continue;
                }
                else
                {
                        memset(databuf,0,4096);
                        W25QXX_Read(databuf,SOUNDSTART+num*16*0x10000+5+datacount,datasize-datacount);
                        //发送最后一包音频文件
                        temp=(datasize-datacount)/32+1;
                        datacount=datasize;
                        for(i=0;i<temp;i++) VS_Send_MusicData(databuf+i*32);
                        break;
                }
        }

        //释放内存空间
        free(databuf);
        databuf=NULL;
       
        return 0;
}

最佳答案

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

也有可能你写入W25Q的数据就已经错了
回复

使用道具 举报

  离线 

485

主题

9万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
120640
金钱
120640
注册时间
2010-12-1
在线时间
967 小时
发表于 2017-12-15 16:00:02 | 显示全部楼层
candylife9 发表于 2017-12-18 09:19
VS_Send_MusicData函数用的是你们的例程,里面有等待DREQ。会不会是读W25Q128的时候数据断流,但是每次都是 ...

也有可能你写入W25Q的数据就已经错了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
微信公众平台:正点原子   点击扫码添加
回复

使用道具 举报

  离线 

485

主题

9万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
120640
金钱
120640
注册时间
2010-12-1
在线时间
967 小时
发表于 2017-12-16 21:58:22 | 显示全部楼层
VS_Send_MusicData的发送,要等待DREQ才能发哦
回复

使用道具 举报

  离线 

7

主题

22

帖子

0

精华

新手上路

Rank: 1

积分
40
金钱
40
注册时间
2017-7-17
在线时间
18 小时
 楼主| 发表于 2017-12-18 09:19:48 | 显示全部楼层
VS_Send_MusicData函数用的是你们的例程,里面有等待DREQ。会不会是读W25Q128的时候数据断流,但是每次都是同样的地方,感觉好奇怪,像是文件本身的问题,电脑上播放又没有问题。
回复

使用道具 举报

  离线 

7

主题

22

帖子

0

精华

新手上路

Rank: 1

积分
40
金钱
40
注册时间
2017-7-17
在线时间
18 小时
 楼主| 发表于 2017-12-19 09:37:23 | 显示全部楼层
我是用XMODEM协议将文件写入W25Q128的,用同样的方式下载过字库也没有问题。都是同样的发送音频文件数据给1053,怎么WAV完全没法播放,全是一片嚓嚓的噪声,MP3虽然中间会有点间断,但是播放完全没有问题呢。
回复

使用道具 举报

  离线 

7

主题

22

帖子

0

精华

新手上路

Rank: 1

积分
40
金钱
40
注册时间
2017-7-17
在线时间
18 小时
 楼主| 发表于 2017-12-21 17:29:48 | 显示全部楼层
正点原子 发表于 2017-12-19 00:39
也有可能你写入W25Q的数据就已经错了

果然是写进W25Q的数据有问题....问题就出在我每次接受到一个数据包后尝试去通过0x1A判断文件是否结束.....就是这个0x1A导致传输过程中程序误认为文件结束而没有把0x1A写进去。。。实际上这个0x1A是文件的一部分....
问题.PNG
回复

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-1-24 06:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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