本期為大家推送迪文開發(fā)者論壇獲獎開源案例——基于T5L智能屏的音樂播放與歌詞顯示方案。該方案通過T5L串口與通用開發(fā)板、解碼板進行數(shù)據(jù)交互,將解析完成的音頻和歌詞通過串口發(fā)送給智能屏,實現(xiàn)音樂播放、歌詞顯示、歌曲播放進度控制等功能,為用戶打造流暢的視聽體驗。
GUI工程設(shè)計
C51工程設(shè)計
(1)T5L智能屏代碼如下:
INIT_CPU();//系統(tǒng)初始化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)圖形剪切函數(shù):
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;//結(jié)束地址 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;//剪切圖形右下角結(jié)束地址Y UpanPlayLog.localPageXY[0]=160; UpanPlayLog.localPageXY[1]=386; VolCutDisp(&UpanPlayLog);}
(3)通用開發(fā)板代碼如下:
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(); // 循環(huán)檢測屏幕上是否有數(shù)據(jù)發(fā)生改變 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;}
-
開源
+關(guān)注
關(guān)注
3文章
3628瀏覽量
43550 -
迪文屏
+關(guān)注
關(guān)注
3文章
83瀏覽量
5748 -
智能屏幕
+關(guān)注
關(guān)注
0文章
72瀏覽量
3616
發(fā)布評論請先 登錄
帶有歌詞顯示的音樂播放
T5L ASIC測試效果提前看!
什么是T5L?
基于迪文T5L屏的智能柜管理系統(tǒng)

分享|基于迪文T5L智能屏的凈水機智能控制系統(tǒng)方案

【開源獲獎案例】基于T5L的smtp郵件發(fā)送器

瀏覽器網(wǎng)頁與T5L迪文屏串口深度擴展(Node-RED技術(shù))

【開源獲獎案例】基于T5L芯片的調(diào)音臺麥克風(fēng)混響回聲控制

【開源獲獎案例】基于T5L智能屏的EQ均衡效果器

評論