OpenEdv-开源电子网

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

移植MP3有些歌曲播放不了

[复制链接]

4

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2015-9-11
在线时间
8 小时
发表于 2015-12-2 19:15:54 | 显示全部楼层 |阅读模式
5金钱
原子哥你好:
我移植的咱们的MP3代码,有些歌曲名字是可以显示,但是在选中该歌曲时是播放不了,向下面跟的话问题定位到这个函数:
WCHAR ff_convert (  /* Converted code, 0 means conversion error */
    WCHAR   src,    /* Character code to be converted */
    UINT    dir     /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */
)
{
   
//  const WCHAR *p;//u16 *p;
    WCHAR c;//u16 c;
    int i, n, li, hi;
    u8 temp[2];
    u16 *t=(u16*)temp;

    if (src < 0x80) {   /* ASCII */
        c = src;
    } else {
        if (dir) {      /* OEMCP to unicode */
//          p = oem2uni;
            hi = ftinfo.oem2uniaddr / 4 - 1;//这里变更oem2uni.bin文件的大小
        } else {        /* Unicode to OEMCP */
//          p = uni2oem;
            hi = ftinfo.uni2oemaddr / 4 - 1;//这里变更uni2oem.bin文件的大小
        }
        li = 0;
        for (n = 16; n; n--) {
            i = li + (hi - li) / 2;//文件偏移值
            //从flash中获取码表数据
            if(dir)SPI_Flash_Read(temp,((i*2*2)+ftinfo.oem2uniaddr),2);//从0开始读出8字节地址数据
            else SPI_Flash_Read(temp,((i*2*2)+ftinfo.uni2oemaddr),2);//从0开始读出8字节地址数据
            if (src == t[0]) break;
            if (src > t[0])
                li = i;
            else
                hi = i;
        }
        if(dir)SPI_Flash_Read(temp,((i*2*2+2)+ftinfo.oem2uniaddr),2);//从0开始读出8字节地址数据
        else SPI_Flash_Read(temp,((i*2*2+2)+ftinfo.uni2oemaddr),2);//从0开始读出8字节地址数据
        c = n ? t[0] : 0;
    }

    return c;

当去索引oem2uni.bin字库时,最炫民族风这首歌曲的“炫”字的汉字编码找不到,所以导致最炫民族风这首歌播放不了,实际测试oem2uni.bin里面是含有“炫”(0xECC5)字码的。感觉是二分查找这样索引是不是索引不完全。我的字库是存在外部flash的。还请原子哥帮试试,或者帮分析分析,小弟在此谢谢了!

让IT变得艺术和生活!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 11:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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