本期为大家推送迪文开发者论坛获奖开源案例——基于T5L智能屏的音乐播放与歌词显示方案。该方案通过T5L串口与通用开发板、解码板进行数据交互,将解析完成的音频和歌词通过串口发送给智能屏,实现音乐播放、歌词显示、歌曲播放进度控制等功能,为用户打造流畅的视听体验。
GUI工程设计
C51工程设计
(1)T5L智能屏代码如下:
INIT_CPU();//系统初始化PORT_Init();//IO口初始化T0_Init();//定时器0初始化// T1_Init();T2_Init();//定时器2初始化// WDT_ON();//打开开门狗 喂狗在定时器T2中my_UART4_Init(115200);uart_init();//串口初始化voidMainMachineHandle(void){ if(UartDataHandle) { uartHandle(Uart4_Rx,uart4_rx_count); CLR_UartMp3(); }}
(2)图形剪切函数:
voidVolCutDisp(VolCutDispLog_Para_s *Para){ u8data WriteBuff[10][2]; u8VolC=0; u16Endaddrx=0; VolC=Para->Vol; memset(WriteBuff,0,sizeof(WriteBuff)); WriteBuff[0][1]=6;//固定 WriteBuff[1][1]=1;//固定 WriteBuff[2][1]=Para->CutPage;//音量条所在页面 WriteBuff[3][0]=Para->CutbegXY[0]>>8;//开始地址 X WriteBuff[3][1]=Para->CutbegXY[0]&0xff;//X WriteBuff[4][0]=Para->CutbegXY[1]>>8;//Y WriteBuff[4][1]=Para->CutbegXY[1]&0xff;//Y Endaddrx=Para->CutbegXY[0]+VolC*0.01*Para->LogoLen;//结束地址 WriteBuff[5][0]=Endaddrx>>8;//X WriteBuff[5][1]=Endaddrx&0xff;//X WriteBuff[6][0]=Para->CutendXY[1]>>8;//Y WriteBuff[6][1]=Para->CutendXY[1]&0xff;//Y WriteBuff[7][0]=Para->localPageXY[0]>>8; WriteBuff[7][1]=Para->localPageXY[0]&0xff; WriteBuff[8][0]=Para->localPageXY[1]>>8; WriteBuff[8][1]=Para->localPageXY[1]&0xff; WriteBuff[9][1]=0XFF; write_dgusii_vp(Para->CutDispaddr,WriteBuff[0],10);}voidUpanPlaySliderLogo(void){ staticu8 VolC=102; u8data Readdtata[2]; VolCutDispLog_Para_sUpanPlayLog; if(NowPage[1]!=4) { VolC=0x102; return; } Read_Dgusii_Vp(0x17B8,Readdtata,1); if(VolC==Readdtata[1]) return; VolC=Readdtata[1]; UpanPlayLog.LogoLen=459;//长度 UpanPlayLog.CutPage=13;//剪切图形所在页面 UpanPlayLog.CutDispaddr=0x8000;//基本图形地址 UpanPlayLog.Vol=VolC;//0~100音量值 UpanPlayLog.CutbegXY[0]=160;//剪切图形左上角开始地址X UpanPlayLog.CutbegXY[1]=386;//剪切图形左上角开始地址Y UpanPlayLog.CutendXY[0]=619;//剪切图形右下角开始地址X UpanPlayLog.CutendXY[1]=398;//剪切图形右下角结束地址Y UpanPlayLog.localPageXY[0]=160; UpanPlayLog.localPageXY[1]=386; VolCutDisp(&UpanPlayLog);}
(3)通用开发板代码如下:
voidLoopHandle_task(void*p_arg){ delay_ms(1000); Init_Mp3data(); DMT_ChangePage(1); while(1) { LCD_Handle(); Mp3PlayProcess(); UdiskDisInOut(); vTaskDelay(LoopHandle_ms / portTICK_PERIOD_MS); }}voidLCD_Handle(void){ DMT_Action1(); // 循环检测屏幕上是否有数据发生改变 Mp3SongSchedUp(); // MP3播放的进度条 USB_PlayDispSongName(); // 歌曲名称更新 MusicPlayLysic(); // 更新歌曲名称}
(4)歌词显示:
voidMusicPlayLysic(void){ staticu16 counttime =0; staticu8 nolrc =0; staticu16 crc1 =0, crc2 =0; u16 crcb1 =0, crcb2 =0; // static u8 updataLysci = 0; u8 ReadBufout1[64][2]; u8 ReadBufout2[64][2]; u8 ReadBufin1[32][2]; u8 ReadBufin2[32][2]; if(DmtDataBuf[MPageid][1] !=4) { counttime =0; crc1 =0; crcb2 =0; nolrc =0; return; } if(DmtDataBuf[MMp3Lrcaddr][1]) { nolrc =0; crcb1 =CalcCrcAll(0xffff, DmtDataBuf[MMp3LrcReadaddr],64); crcb2 =CalcCrcAll(0xffff, DmtDataBuf[MMp3LrcReadaddr +32],64); if(crcb1 != crc1 || crc2 != crcb2) { crc1 = crcb1; crc2 = crcb2; memset(ReadBufout1,0,sizeof(ReadBufout1)); memset(ReadBufout2,0,sizeof(ReadBufout2)); memset(ReadBufin1,0,sizeof(ReadBufin1)); memset(ReadBufin2,0,sizeof(ReadBufin2)); memcpy(ReadBufin1, DmtDataBuf[MMp3LrcReadaddr],64); memcpy(ReadBufin2, DmtDataBuf[MMp3LrcReadaddr +32],64);// All_unicodeToUtf(ReadBufin1,// (u8 *)ReadBufout1,MusicLysicDoubleNULL(ReadBufin1,64));// All_unicodeToUtf(ReadBufin2,// (u8 *)ReadBufout2,MusicLysicDoubleNULL(ReadBufin2,64)); UnicodeToGbk((u16*)ReadBufin1, (u16 *)ReadBufout1,MusicLysicDoubleNULL((char*)ReadBufin1,64)); UnicodeToGbk((u16*)ReadBufin2, (u16 *)ReadBufout2,MusicLysicDoubleNULL((char*)ReadBufin2,64));// ShuangYu_UTF_DispLysic(lv_label_get_text(lv_SY_UTF_top->songname),ReadBufout1,ReadBufout2); DMT_WriteLen(0x7100, ReadBufout1[0],32,1); DMT_WriteLen(0x7120, ReadBufout2[0],32,1); } } elseif(nolrc==0) { nolrc=1; crc1=0; crcb2=0; DMT_WriteLen(0x7100,"无",2,1); ClearDGUSIIMemory(32,0x7120);// ShuangYu_UTF_DispLysic(lv_label_get_text(lv_SY_UTF_top->songname),"无"," "); }}
(5)解码板代码如下:
voidWritecmdHandle(void){ ChangeModeTask(); SysVolSetting(); BT_PlayPreNextPPSong(); PlayModeFun(); DirsclustReadSong(); PlaySclustSong(); UserTWS_Oper(); BreakSavePlay(); ClearTwsTransData(); TwsTransData(); BtLinkOper(); SYS_Reset();}boollrc_ui_show(inttext_id, u8encode_type, u8 *buf,intlen, u8 lrc_show_flag, u8 lrc_update){#if1//(CONFIG_UI_STYLE ==STYLE_JL_SOUNDBOX) staticint disp_len =0; staticu8 lrc_showbytes =0; staticu8 offset =0; if(lrc_update) { disp_len= len; lrc_showbytes=0; offset=0; //ui_text_set_text_by_id(LRC_TEXT_ID_SEC, "", 16, FONT_DEFAULT); } if(lrc_show_flag ==1) { printf("encode_type:%d\r\n",encode_type); printf("id:%02d,%s\r\n",text_id,buf);//这里是显示歌曲 gbk编码 ModReadReg[RD_SongLysicOn][0]=encode_type; if(text_id<2)? ? ? ? {? ? ? ? ? ? memset(ModReadReg[RD_MusicLy1+text_id*32],0,64);? ? ? ? ? ? GbkToUnicode(buf,ModReadReg[RD_MusicLy1+text_id*32],32);? ? ? ? ? ? //strcpy(ModReadReg[RD_MusicLy1+text_id],buf);? ? ? ? }? ? ? ? //log_info_hexdump(buf,len);? ? }#endif? ? ?returntrue;}
-
开源
+关注
关注
3文章
3755浏览量
43984 -
迪文屏
+关注
关注
3文章
83浏览量
5821 -
智能屏幕
+关注
关注
0文章
72浏览量
3676
发布评论请先 登录
带有歌词显示的音乐播放
T5L ASIC测试效果提前看!
什么是T5L?
分享|基于迪文T5L智能屏的净水机智能控制系统方案

浏览器网页与T5L迪文屏串口深度扩展(Node-RED技术)

【开源获奖案例】基于T5L芯片的调音台麦克风混响回声控制

评论