| 本帖最后由 gtbestom 于 2021-8-24 16:38 编辑 
 #申请原创#   @21小跑堂
 上回说了 bmp 格式图片解码并显示,这篇换个格式,解码 mp3 文件
  先说效果,流畅解码 320kbps 及以下 mp3 文件,320kbps 以上码率未测试,找不到高码率 mp3 文件
 播放效果感觉比 10 年前的 mp3 随身播放器好很多,当然如果要更高音质,推荐 vs1053 解码芯片
 
 
 mp3 格式相对复杂,而且进行了压缩和变换,如果使用软解,无疑耗费资源,效果也有待考证
 想想 64K 的 Flash 空间已经快用完了,默默放弃软解
  
 
   硬解码 mp3,就需要外接解码芯片,从库存里翻出一片 vs1003 解码模块,杜邦线接上,又凌乱了  
   
  文件系统也有了,打开目录搜索一下文件
 
 处理长文件名,通过串口打印,并显示到 LCD 屏res = f_opendir(&dir, path);
if(res == FR_OK)
{
    for(;;)
    {
        res = f_readdir(&dir, &fno);
        if(res != FR_OK || fno.fname[0] == 0) break;
        if(fno.fattrib & AM_DIR)    // 是目录
        {
            ;
        }
        else                        // 是文件
        {
            // 文件处理
        }
    }
}
 读取 mp3 并发送到 vs1003 进行解码播放            p = pt;
            pth = *fno.lfname ? fno.lfname : fno.fname;
            while(*pth != 0)
            {
                ct = ff_convert(*pth, 0);
                if(ct > 255)
                {
                    *p = (u8)(ct>>8);
                    p++;
                    *p = (u8)ct;
                    p++;
                }
                else
                {
                    *p = (u8)ct;
                    p++;
                }
                pth++;
            }
            *p = 0;
            p = pt;
            printf("%s\r\n", p);
            GUI_Str(p);
            GUI_SetX(20);
            GUI_MoveY(13);
             pth = *fno.lfname ? fno.lfname : fno.fname;     // 文件名
            Str_AsciiToUni("0:/", path1);                   // 文件目录
            Str_UniCat(path1, pth);                         // UNICODE 字符串拼接
            res_sd = f_open(&mp3, path1, FA_READ);          // 打开文件
            while(1)
            {
               res_sd = f_read(&mp3, Buff, 8192, &cout);    // 读取文件
               if(cout==0) break;
               for(i=0; i<cout; i+=32)
               {
                   while(  VS1003_CheckBusy() == 0 );
                   VS1003_WriteData( Buff + i );            // 播放mp3音乐数据
               }
            }
到此基本功能就实现了,搜索根目录下的 mp3 文件,读取并发送到 vs1003 解码并播放
 这里是把 mp3 整个文件都发送到 vs1003 解码,包括 ID3v1、v2 标签等文件信息,这里就不再深入,也支持 WMA、WAV、MIDI 格式音频
 
 
 
 
 |