打印
[RISC-V MCU 创新应用比赛]

沁恒 CH32V103 mp3播放器雏形

[复制链接]
3641|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 gtbestom 于 2021-8-24 16:38 编辑

#申请原创#   @21小跑堂
  上回说了 bmp 格式图片解码并显示,这篇换个格式,解码 mp3 文件
  先说效果,流畅解码 320kbps 及以下 mp3 文件,320kbps 以上码率未测试,找不到高码率 mp3 文件
  播放效果感觉比 10 年前的 mp3 随身播放器好很多,当然如果要更高音质,推荐 vs1053 解码芯片


  mp3 格式相对复杂,而且进行了压缩和变换,如果使用软解,无疑耗费资源,效果也有待考证
  想想 64K 的 Flash 空间已经快用完了,默默放弃软解

  硬解码 mp3,就需要外接解码芯片,从库存里翻出一片 vs1003 解码模块,杜邦线接上,又凌乱了

  

  文件系统也有了,打开目录搜索一下文件
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                        // 是文件
        {
            // 文件处理
        }
    }
}
  处理长文件名,通过串口打印,并显示到 LCD 屏
            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);
  读取 mp3 并发送到 vs1003 进行解码播放
            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 格式音频



使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

104

帖子

0

粉丝