[求助]例程13如何修改用于控制歌曲上下播放?

例程13用的是For循環(huán) 按順序打開的文件 無法控制 對MP3上一首 下一首的控制, 請問如何修改?

UINT8 ListAll( void ) /* 以廣度優(yōu)先的算法枚舉整個U盤中的所有文件及目錄 */ { UINT8 s, Song_th=1; UINT16 OldFileCount; // UINT16 RealReadCount; u8 *pu8Temp = u8SectorBuf; u32 u32FileLen = 0; u32 u32DataCnt = 0; u32 m; u8 j, nameLen; char *pExt;

u32 file_pos=0; //記錄文件播放的長度

FileNameBuffer[ 0 ].Name[0] = '/'; /* 根目錄,是完整路徑名,除根目錄是絕對路徑之外都是相對路徑 */ FileNameBuffer[ 0 ].Name[1] = 0; FileNameBuffer[ 0 ].DirStartClust = 0; /* 根目錄的起始簇號 */ FileNameBuffer[ 0 ].Attr = ATTR_DIRECTORY; /* 根目錄也是目錄,作為第一個記錄保存 */ for ( OldFileCount = 0, FileCount = 1; OldFileCount < FileCount; OldFileCount ++ ) { /* 尚有新枚舉到的文件名結(jié)構(gòu)未進(jìn)行分析,FileCount處于變化之中 */

if ( FileNameBuffer[ OldFileCount ].Attr & ATTR_DIRECTORY ) { /* 是目錄則繼續(xù)進(jìn)行深度搜索 */ s = ListFile( OldFileCount ); /* 枚舉目錄,記錄保存到結(jié)構(gòu)中,FileCount可能會改變 */

if ( s != USB_INT_SUCCESS ) return( s ); }

}

/* U盤中的文件及目錄全部枚舉完畢,下面開始根據(jù)結(jié)構(gòu)記錄依次打開文件 */ printf( "Total file&dir = %d, Open every file:\n", FileCount ); for ( OldFileCount = 0; OldFileCount < FileCount; OldFileCount ++ ) { if ( ( FileNameBuffer[ OldFileCount ].Attr & ATTR_DIRECTORY ) == 0 ) { /* 是文件則打開,目錄則跳過 */ // USART1_SendByte(0xe4); LCD_ShowString(100,110,"is file"); nameLen = strlen( (char const *)(FileNameBuffer[ OldFileCount ].Name) ); if(nameLen < 4) continue; pExt = ((char *)(FileNameBuffer[ OldFileCount ].Name)) + nameLen - 4; if(strcmp(pExt, (char *)".MP3") == 0 ){

// printf( "Open file: %s\n", FileNameBuffer[ OldFileCount ].Name ); CH376WriteVar32( VAR_START_CLUSTER, FileNameBuffer[ OldFileCount ].DirStartClust ); /* 將當(dāng)前文件所在上級目錄的起始簇號設(shè)置為當(dāng)前簇號,相當(dāng)于打開上級目錄 */ s = CH376FileOpen( FileNameBuffer[ OldFileCount ].Name ); /* 打開文件 */ USART1_SendByte(s); if ( s == USB_INT_SUCCESS ) { /* 成功打開了文件 */ // USART1_SendByte(0xe5);

LCD_ShowString(50,120,"file OPEN!"); // timer=5;//設(shè)置到一個不可能的值,初始化信息欄

u32FileLen = CH376GetFileSize(); /* 獲取文件大小 */ while (u32DataCnt < u32FileLen) {

SPI2_SetSpeed(SPI2_SPEED_4);//高速 pu8Temp = u8SectorBuf; CH376SecRead(pu8Temp, 1, 0); /*以扇區(qū)為單位從當(dāng)前位置讀取數(shù)據(jù)塊,不支持SD卡*/ u32DataCnt += 512;

// MP3_PROG(file_pos,u32FileLen);//MP3進(jìn)度顯示/播放時間

MP3_Msg_Show(u32FileLen,Song_th,255,file_pos); //MP3進(jìn)度顯示/播放時間

SPI1_SetSpeed(SPI1_SPEED_8); //高速,對VS1003B,設(shè)置為4.5M LCD_ShowString(160,180,"PLAY!"); m = 0; while (m < 512) //循環(huán)發(fā)送512個字節(jié) { while (VS_DREQ == 0); //等待DREQ為高

VS_XDCS = 0; for (j=0; j<32; j++) { SPI1_ReadWriteByte(*pu8Temp++); } m += 32; VS_XDCS = 1; // } } file_pos++;//增加512個字節(jié) if(file_pos>(u32FileLen/512))break;//文件長度到了 結(jié)束了,跳出 } Song_th++; // CH376FileClose( FALSE ); /* 不做寫操作可以無需關(guān)閉 */ LCD_ShowString(50,120,"file close!"); Mp3Reset(); Vs1003SoftReset(); } } }

}

return( s ); }

我們的例子是提供枚舉所有播放文件,然后將所有的播放文件的首簇存放起來,后續(xù)播放需要你自己記住文件的首簇位置。這樣上一曲和下一曲就很容易了。


多謝指導(dǎo)~


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频