OpenEdv-开源电子网

标题: 移植MP3有些歌曲播放不了 [打印本页]

作者: hufanli21    时间: 2015-12-2 19:43
标题: 移植MP3有些歌曲播放不了
原子哥你好:
我移植的咱们的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的。还请原子哥帮试试,或者帮分析分析,小弟在此谢谢了!
作者: 正点原子    时间: 2015-12-2 21:34
我们例程运行良好啊
作者: hufanli21    时间: 2015-12-4 10:08
回复【2楼】正点原子:
---------------------------------
谢谢原子哥的回复。可以放“最炫名族风这首歌”是吧,这就奇怪了,我用咱们最初的程序也不行,难道给外部硬件flash有关系。或者原子哥能给我下你最新的例程吗,在此先谢谢了




欢迎光临 OpenEdv-开源电子网 (http://www.openedv.com/) Powered by Discuz! X3.4