OpenEdv-开源电子网

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

战舰版的音乐播放器移植后,为什么只能播放wma格式的音乐?

[复制链接]

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
发表于 2013-1-6 03:01:17 | 显示全部楼层 |阅读模式
          战舰版的程序,很实用,原子的开发指南写的很深入,一般移植都会成功的,应向原子致谢!
 
          最近遇到个怪事,百思不得其解,招数使尽,故障照旧,无奈,再次来此求教了。我把战舰板的音乐播放器移植到 STM32F103VE 的 100脚 开发板上,把 RST,DREQ,XDCS,XCS

4个脚作了改动,SCK,MOSI ,MISO 的3个脚,仍接在 PA5,PA6,PA7的 SPI1 口上,文件系统也是移植战舰版上的,FATFS 0.09 ,字库在W25Q64中的,没有改动原程序中的任何地方,

仅仅将有关I/O口,根据100脚的STM32 进行必要的改动 ,可是播放器只能播放wma格式的音乐文件,MP3播放不了,用串口助手看结果,长文件名,全变成8.3格式的短文件名,

      见下图: 在 res = f_open(fmp3,(const TCHAR*)pname,FA_READ); 语句下,用 printf("用f_open打开的路径是:\n %s\n",pname);  语句 看 路径,只要是MP3 ,就打不开,返回

结果就不是0,所以 if (res==0)  //以上打开文件成功了
              {
               printf("进入到res==FR_OK{}里");
                               (播放程序段)
                              。。。。。
                             }

     


 

   下图是串口显示数据截图, 1,2,4是wma格式文件,进入播放实施程序里,3 是 MP3 本来是段民乐叫:嘻嘻哈哈过新年,是长文件名,而它变成8.3的短文件名,并且到 f-open()时

打不开,跳过播放程序段,无法播放了,这是什么原因呢? 好像问题还是出现在文件系统上,能播放wma文件,正弦波自检好用,
说明硬件没有问题吧?到底是什么问题,请施教,感激!







正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-6 03:04:13 | 显示全部楼层
   发图怎么这么大?尺寸搞错了?抱歉!

  我自己删不掉了,不好看,就请原子删去吧。
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-6 09:07:00 | 显示全部楼层
 [Down] 
[Up]重新发图:



          战舰版的程序,很实用,原子的开发指南写的很深入,一般移植都会成功的,应向原子致谢!
 
          最近遇到个怪事,百思不得其解,招数使尽,故障照旧,无奈,再次来此求教了。我把战舰板的音乐播放器移植到 STM32F103VE 的 100脚 开发板上,把 RST,DREQ,XDCS,XCS

4个脚作了改动,SCK,MOSI ,MISO 的3个脚,仍接在 PA5,PA6,PA7的 SPI1 口上,文件系统也是移植战舰版上的,FATFS 0.09 ,字库在W25Q64中的,没有改动原程序中的任何地方,

仅仅将有关I/O口,根据100脚的STM32 进行必要的改动 ,可是播放器只能播放wma格式的音乐文件,MP3播放不了,用串口助手看结果,长文件名,全变成8.3格式的短文件名,

      见下图: 在 res = f_open(fmp3,(const TCHAR*)pname,FA_READ); 语句下,用 printf("用f_open打开的路径是:\n %s\n",pname);  语句 看 路径,只要是MP3 ,就打不开,返回

结果就不是0,所以 if (res==0)  //以上打开文件成功了
               {
               printf("进入到res==FR_OK{}里");
                               (播放程序段)
                              。。。。。
                             }



     







回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-6 09:09:36 | 显示全部楼层
又糟糕,图还是位置不对,原来发图过,都很正常啊!
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-6 09:11:37 | 显示全部楼层
 下图是串口显示数据截图, 1,2,4是wma格式文件,进入播放实施程序里,3 是 MP3 本来是段民乐叫:嘻嘻哈哈过新年,是长文件名,而它变成8.3的短文件名,并且到 f-open()时

打不开,跳过播放程序段,无法播放了,这是什么原因呢? 好像问题还是出现在文件系统上,能播放wma文件,正弦波自检好用,说明硬件没有问题吧?到底是什么问题,请施教,感激!
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-6 09:13:27 | 显示全部楼层


回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-6 09:15:43 | 显示全部楼层
乱套了,请版主删去吧,不敢再发图了!
回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13110
金钱
13110
注册时间
2012-11-26
在线时间
3812 小时
发表于 2013-1-6 10:40:22 | 显示全部楼层
回复【7楼】dong:
---------------------------------
自己可以删的   有“编辑”这个按钮
学无止境
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-6 10:51:32 | 显示全部楼层
估计是你的UNIGBK.BIN没有更新好。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-6 15:18:03 | 显示全部楼层
回复【9楼】正点原子:

估计是你的UNIGBK.BIN没有更新好。

=================================================
        谢谢原子的解答!

       原程序我是一点也没敢动,按战舰这道例题的说明,,在SD卡根目录存SYSTEM文件夹,这夹里存字库,开机后进行自动更新字库,并且在LCD上

有汉字显示时,工作很顺畅,12,16两种字体都你能显示,这UNIGBK.BIN 字库和GBK12.BIN和GBK16.FON在一起,哪道只有UNIGBK.BIN 字库

没有更新好?我再根据原子的解答,查查看。

    还请原子及各位朋友更进一步支个招吧,谢谢!
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-6 15:19:48 | 显示全部楼层
回复【8楼】jermy_z:

回复【7楼】dong:
---------------------------------
自己可以删的   有“编辑”这个按钮

---------------------------------
 那就好了,以后再遇到这个问题,我就可以自己删去了。
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-7 09:16:59 | 显示全部楼层

回复【9楼】正点原子:回

 估计是你的UNIGBK.BIN没有更新好。

----------------------------------------------------------------------------------------------------------------------------------------------
          大师级,就是大师,确是这个问题,我把mycc936删去,还用原来的cc936, 编译后,MP3能够播放了,长文件中文名也有了,故此,我又

反复更新字库,可是只要再用上mycc936,就故障依旧,看样子,这字库是已经移植好了,好像其他环节还是有点小BUG ,水平太低,怎么也找不出

来,还请原子及其他大师指点一下,问题到底出在哪了???

      程序没有任何改动,是照搬原程序的,只是把W25Q64的接线改动一下,把CS的 B12 改为 B10; 把MOSI. MISO. SCK的PB13, 14,  15 改为 

PA5, 6, 7, 并且在更新字库后,12,16汉字体都好用,在LCD上汉字显示正常,怎么在MP3里,汉字就不好用了呢???

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-7 11:02:39 | 显示全部楼层
长文件名支持,需要用到UNICODE2GBK的转换,也就是cc936这个文件,mycc936,是在你的falsh特定地址存在UNIGBK.BIN的前提下,才能用的.否则,失败.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-7 11:09:10 | 显示全部楼层
为了便于老师们分析问题,再补充一点:

         在换回cc936文件后,虽然MP3能够播放了,但是还有个小问题不解,为了便于监视播放文件的情况,我用串口助手和TFT显示两种方法

进行监视,遇到中文文件名,串口助手显示一切正常,中文名及扩展名的MP3都能显示,可TFT的LCD屏上只能显示英文字母和MP3字符,中文名

还是显示不出来,何因? 当然这时的MP3播放还是正常的,只是在LCD上还是不能显示中文字符。源程序见下文:

 //==================================================================================
strcpy((char*)pname,"0:/MUSIC/");   //strcpy是把"0:/MUSIC/"路径(目录)复制到pname指针里
strcat((char*)pname,(const char*)fn); //strcat是把fn文件名接在上面已复制到pname里路径后面
//===================================================================================
     printf("文件名:\n %s\n",fn);                  /*在串口助手窗口里输出要播放的音乐文件名*/

    LCD_Fill(460,230, 620, 250,WHITE);      //清除原显示的画线 
    Show_Str(460,230,240,16,fn,16,1);    /*在LCD上要播放的音乐文件名*/
//===================================================================================
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-7 11:32:20 | 显示全部楼层

---------------------------------
回复【13楼】正点原子:

长文件名支持,需要用到UNICODE2GBK的转换,也就是cc936这个文件,mycc936,是在你的falsh特定地址存在UNIGBK.BIN的前提下,才能用的.否则,失败.

----------------------------------------------------------------------------------------------------------------------------------------------
因为mycc936文件,我没有改动过任何语句,SPI_Flash_Read((u8*)&t,ftinfo.ugbkaddr+i*4+gbk2uni_offset,4);  是用原程序的,UNIGBK.BIN

在W25Q64中存放地址和大小,仍然是tinfo.ugbkaddr和ftinfo.ugbksize都没有改变,也就是说使用falsh特定地址存在UNIGBK.BIN的环境是和战舰板

一样的,为什么移植后,汉字显示就出了问题呢?不解...........
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-7 13:09:53 | 显示全部楼层
回复【15楼】dong:
---------------------------------
那说明你存取存在问题,先验证下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-7 15:50:09 | 显示全部楼层
回复【16楼】正点原子:

回复【15楼】dong:
---------------------------------
那说明你存取存在问题,先验证下.

---------------------------------
      还是先谢谢你的解答!

      我也怀疑是存储存在问题,又设法存储5,6次,都是一个结果,在LCD上显示12,16字体都正常,可一到 mp3_play(); 播放音乐程序里,这汉字显示

就挂了,死活不显示汉字,并且更厉害的是,只要是汉字名的音乐,就无法播放;而换成cc936,汉字名的MP3可以播放了,奇怪了...............

        难道在字库存储的过程中,偏偏gbk16,gbk12 字库更新成功,而这 unigbk 字库 就是没有更新好,有误?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-7 17:05:19 | 显示全部楼层
回复【17楼】dong:
---------------------------------
因为LCD显示,不需要用到UNIGBK.BIN这个文件。
检查这个文件。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-8 13:35:17 | 显示全部楼层
回复【18楼】正点原子:

回复【17楼】dong:
---------------------------------
因为LCD显示,不需要用到UNIGBK.BIN这个文件。
检查这个文件。

-------------------------------------------------------------------------------------------------------------------
     真是奇怪了,UNIGBK.BIN这个文件我检查多次,没发现问题。为了排除是由于改动W25Q64的管脚可能造成故障的发生,我特意把

SCK,MOSI,MISO三条关键的管脚,由PA5,6,7的SPI1改回到SPI2的PB13,14,15,保持和战舰板一样的接口,并且又换一只新的W25Q64,开机重新

更改字库,那个更新字库的百分比显示也工作,显示更改的过程很正常,可是更改后的故障和原来的一样,MP3不能播放,中文照样不能显示,我分析是

否和改动的cc936程序有关系?SPI_Flash_Read((u8*)&t,ftinfo.ugbkaddr+i*4+gbk2uni_offset,4); 没找到GBK16码?但在战舰板上怎么能找到?

没弄明白,再请原子及其他老师给予指点,多谢!
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-8 23:26:29 | 显示全部楼层
  还没有人解答这个问题,顶上去,等等吧。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-9 01:26:41 | 显示全部楼层
回复【19楼】dong:
---------------------------------
你这个问题归根到底,就是UNIGBK转换出了问题,不用说播放MP3,只要你能正常输出长文件名(串口输出),问题就可以解决了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-9 10:32:42 | 显示全部楼层
回复【21楼】正点原子:

回复【19楼】dong:
---------------------------------
你这个问题归根到底,就是UNIGBK转换出了问题,不用说播放MP3,只要你能正常输出长文件名(串口输出),问题就可以解决了.

-------------------------------------------------------------------------------------------------------------------------------------------------

      原子就是好,不像其他卖家,开发板买到手,你就别想再找到他,就是好容易用电话找到他,他不但不给解答,反而还会挖苦你一番,说什么:

“这么简单的问题,你自己还不会解决啊。”,屁话,我要是都会解决了,还会买你这破开发板吗?买了就是为了学习,在学习过程,有些问题实在抠不出

来了,必然会问你,你在卖板前的承诺,都不允诺了,可惜你还是个这个搞技术的,不和社会上某骗子一样吗?我也发现,其实有的卖板的,所谓的的开

发者,他自己都没搞明白,东筹西拼的,拿出来板子卖,你问他,解答不出来,装着挖苦用户去了。现在市面上几种STM32开发板,我几乎都买到手了,

用了后,才有以上的亲身感受,说给大家听听。总结经验教训,原子的板是最好的,人家的程序都是自创的,特别是寄存器程序,那没有一定的技术水平

和坚韧不拔的毅力,是搞不出来那个东西的!这才叫中国特色,恐怕全球搞STM32的,只有原子一人,能搞出这么详细好用的寄存器版的STM32开发技

术。原子这个论坛办得也很红火,聚集的人气也不少,原子在百忙的工作中,每天抽空到坛子里解答问题,实属不易,不像有些论坛,只是个招牌,立起

来,就没见到他来过。希望这个坛子越办越好,板子越卖越多,不是说某种板子买到台湾,新加坡,等东南亚国家吗,我看战舰版,可以卖到日本,美国

等发达国家的。原子的腰包会鼓的很大很大,这是光荣的,是靠技术致富的,是正经道!不像某些房屋开发商什么的,连自己的名字都写不好,可靠关

系,歪门邪道,发了大财了,原子这种致富方法,是我们这些搞技术的人,永远的学习楷模!

====================================================================================
   
   个人的感受体会由于时间关系,不再说下去了,还是说说这道问题:确实是UNIGBK转换出了问题,可奇怪的是用战舰板一样的程序,只改了几条接

口线,更奇怪的是:移植后GBK12,16字库都可以正常使用,可为什么,就偏偏是UNIGBK库没移植好,出了问题?



回复 支持 反对

使用道具 举报

30

主题

210

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2012-11-22
在线时间
12 小时
发表于 2013-1-9 15:24:36 | 显示全部楼层
lz总结的不错啊
VLSI?大陆区一级授权代理商,提供技术支持,QQ839638158?VS1003?VS1053?VS1063?VS1011?VS1005?VS1205?VS1103?VS1033?VS8005?VS8053?VS1000?VS23S010?VS1163?开发板,淘宝店铺http://shop105947990.taobao.com/?QQ2355355257
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-9 16:17:20 | 显示全部楼层
回复【22楼】dong:
---------------------------------
有个简单的办法:你的UNIGBK.BIN存放的地址,肯定知道,那你存放后,从这个地址开始,连续读取一部分字节,发送到电脑,对比原版的UNIGBK.BIN,看看有没有出入。如果正确,进行下一步。在cc936.C里面,捕获一次转换,得到从flash读出的原版数据,然后和真正的数据对比一下,就能查出问题了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-10 00:18:28 | 显示全部楼层
回复【24楼】正点原子:

回复【22楼】dong:
---------------------------------
有个简单的办法:你的UNIGBK.BIN存放的地址,肯定知道,那你存放后,从这个地址开始,连续读取一部分字节,发送到电脑,对比原版的UNIGBK.BIN,看看有没有出入。如果正确,进行下一步。在cc936.C里面,捕获一次转换,得到从flash读出的原版数据,然后和真正的数据对比一下,就能查出问题了。

------------------------------------------------------------------------------------------
   好的,再去查查看。

   谢谢!
回复 支持 反对

使用道具 举报

9

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2016-7-18
在线时间
67 小时
发表于 2017-1-21 18:19:16 | 显示全部楼层
遇到同样的问题了,真的是字库问题,66666,谢谢!!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-1 02:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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