📄 mediainfogetnew.c
字号:
uiID += uiBaseID;
RKmemset(&SortIndex, 0, sizeof(MEDIA_SORT_INFO_STRUCT));
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
GetSortInfo(&SortIndex, uiID, GENRE_IN_SORT_ADDR);
GetSaveFileInfo(&FileInfo, SortIndex.FileSearchID);
RKmemcpy(pMediaInfo->ListName1, FileInfo.LongFileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16));
RKmemcpy(pMediaInfo->ListName2, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌手信息
//RKmemcpy(pMediaInfo->ListName3, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌曲播放时间
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
//pMediaInfo->ChildItemNum = SortIndex.ItemNum;
pMediaInfo->SorIndex = SortIndex.IndexID;
#if 1
RKmemcpy(pMediaInfo->ListName3, FileInfo.Time, 8*sizeof(UINT16)); // 提取歌曲播放时间
#else
RKstrcat(FileInfo.Path, FileInfo.Name);
fFile = RKFSFileOpen(FileInfo.Path, "r");
if (fFile != NULL)
{
GetTimeUnicodeStr(fFile, TimeStr);
RKmemcpy(pMediaInfo->ListName3, TimeStr, sizeof(TimeStr)); // 获取音乐播放时间
RKFSFileClose(fFile);
fFile = NULL;
}
#endif
}
/*----------------------------------------------------------------------
Name : GetPlaylistMusicInfo
Desc : 获取某个播放列表内的音乐文件
Params: pMediaInfo:文件列出信息 uiID:文件序号 PlaylistNO:播放列表号
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetPlaylistMusicInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 PlaylistNO)
{
FS_FILE* fFile = NULL;
PLAYLIST_INFO_STRUCT PlaylistStruct;
char *pTemp = NULL;
if (PlayListInfo[PlaylistNO].FileNum == 0)
return ;
if (PlayListInfo[PlaylistNO].pPlaylistMem == NULL) // 收藏夹信息尚未调入内存
{
fFile = FSFileOpen(PlayListInfo[PlaylistNO].pPath, "r");
if (fFile != NULL)
{
FSFileSeek(fFile, (uiID + 1)*sizeof(PLAYLIST_INFO_STRUCT), FS_SEEK_SET);
FSFileRead(&PlaylistStruct, sizeof(PLAYLIST_INFO_STRUCT), fFile);
FSFileClose(fFile);
RKmemcpy(pMediaInfo->ListName1, PlaylistStruct.FileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16));
RKmemcpy(pMediaInfo->Name, PlaylistStruct.Name, 11);
RKmemcpy(pMediaInfo->Path, PlaylistStruct.Path, FS_MAX_PATH_LEN);
}
}
else
{
RKSemObtain(&PlayListUseSem);
//PlayListInfo[PlaylistNO].BusyFlag = 1; // 表示收藏夹内存使用中
pTemp = &PlayListInfo[PlaylistNO].pPlaylistMem[(uiID+1)*sizeof(PLAYLIST_INFO_STRUCT)];
RKmemcpy(&PlaylistStruct, pTemp, sizeof(PLAYLIST_INFO_STRUCT));
RKmemcpy(pMediaInfo->ListName1, PlaylistStruct.FileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16));
RKmemcpy(pMediaInfo->Name, PlaylistStruct.Name, 11);
RKmemcpy(pMediaInfo->Path, PlaylistStruct.Path, FS_MAX_PATH_LEN);
//PlayListInfo[PlaylistNO].BusyFlag = 0; // 表示收藏夹内存操作完毕
RkSemRelease(&PlayListUseSem);
}
}
/*----------------------------------------------------------------------
Name : GetFavoFileInfo
Desc : 获取录音文件信息
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-12-03
----------------------------------------------------------------------*/
void GetRecordFileInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
FS_VOLUME *pVolume;
const char *pFileName = NULL;
FS_FIND_DATA FindData;
UINT32 RecordDirClus = 0;
UINT16 i = 0;
FS_FDT Fdt;
UINT16 RecordName[100]; // 录音文件长文件名,大于11字节应该就可以满足要求了,看录音模块怎么定
#ifdef FS_OS_SUPPORT
FS_OBTAIN_FILE_SEM;
#endif
#if (defined(BOARD))
pVolume = FS_FindVolume("D:\\", &pFileName); // 获取卷信息
#else
pVolume = FS_FindVolume("C:\\", &pFileName); // 获取卷信息
#endif
#ifdef FS_OS_SUPPORT
FS_RELEASE_FILE_SEM;
#endif
if (pVolume == NULL)
return;
RecordDirClus = FS_GetDirClusIndex(pVolume, "\\RECORD\\", &pFileName); // 得到录音目录的簇号
if (RecordDirClus != FS_BAD_CLUS && RecordDirClus != 0)
{
FindData.pVolume = pVolume;
FindData.Clus = RecordDirClus; // 当前目录首簇号
FindData.Index = 0; // 从第一个FDT索引项开始
while (FS_RETURN_OK == FS_FindNext(&Fdt, &FindData, "WAV"))
{
if (i == uiID)
break;
i++;
}
if (i == uiID)
{
RKmemset(RecordName, 0, sizeof(RecordName));
GetLongFileName(RecordName); // 获取长文件名
RKmemset(pMediaInfo, 0, sizeof(FILE_MEDIAINFO_STRUCT));
RKstrcpy(pMediaInfo->Path, "D:\\RECORD \\");//RecordPath
RKmemcpy(pMediaInfo->Name, (char*)(Fdt.Name), 11);
RKmemcpy(pMediaInfo->ListName1, RecordName, 11*sizeof(UINT16));
}
}
}
/* ---------------------------------------------------------------------------------------------------------------
----------- 所有文件信息获取 ------------
------------------------------------------------------------------------------------------------------------------*/
#ifdef SAVE_ALL_FILES_INFO
/*----------------------------------------------------------------------
Name : GetMediaALLImageInfo
Desc : 获取所有图片文件信息
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-12-13
----------------------------------------------------------------------*/
void GetMediaALLImageInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
ALLFILE_INFO_STRUCT FileInfo;
FS_FILE* fFile = NULL;
fFile = FS_fopen(ImageSavePath, "r");
if (fFile == NULL)
return ;
FS_fseek(fFile, uiID*sizeof(ALLFILE_INFO_STRUCT), FS_SEEK_SET); //
FS_fread(&FileInfo, sizeof(ALLFILE_INFO_STRUCT), 1, fFile);
FS_fclose(fFile);
fFile = NULL;
RKmemcpy(pMediaInfo->ListName1, FileInfo.LongFileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16)); // 保存的长文件名
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
}
/*----------------------------------------------------------------------
Name : GetMediaALLMovieInfo
Desc : 获取所有视频文件信息
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-12-13
----------------------------------------------------------------------*/
void GetMediaALLMovieInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
ALLFILE_INFO_STRUCT FileInfo;
FS_FILE* fFile = NULL;
fFile = FS_fopen(MovieSavePath, "r");
if (fFile == NULL)
return ;
FS_fseek(fFile, uiID*sizeof(ALLFILE_INFO_STRUCT), FS_SEEK_SET); //
FS_fread(&FileInfo, sizeof(ALLFILE_INFO_STRUCT), 1, fFile);
FS_fclose(fFile);
fFile = NULL;
RKmemcpy(pMediaInfo->ListName1, FileInfo.LongFileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16)); // 保存的长文件名
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
}
/*----------------------------------------------------------------------
Name : GetMediaALLTxtInfo
Desc : 获取所有文本文件信息
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-12-13
----------------------------------------------------------------------*/
void GetMediaALLTxtInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
ALLFILE_INFO_STRUCT FileInfo;
FS_FILE* fFile = NULL;
fFile = FS_fopen(TextSavePath, "r");
if (fFile == NULL)
return ;
FS_fseek(fFile, uiID*sizeof(ALLFILE_INFO_STRUCT), FS_SEEK_SET); //
FS_fread(&FileInfo, sizeof(ALLFILE_INFO_STRUCT), 1, fFile);
FS_fclose(fFile);
fFile = NULL;
RKmemcpy(pMediaInfo->ListName1, FileInfo.LongFileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16)); // 保存的长文件名
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
}
#endif
/* ---------------------------------------------------------------------------------------------------------------
----------- 搜索信息获取 ------------
------------------------------------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------
Name : GetSearchTotalNum
Desc : 获取搜索到的满足条件的文件个数
Params: SearchType:搜索类型 FilterType:过滤首字母类型
Return:
Author: phc
Date : 07-12-11
----------------------------------------------------------------------*/
UINT32 GetSearchTotalNum(UINT16 SearchType, UINT16 FilterType)
{
FS_FILE* fFile = NULL;
UINT16 SearchNum = 0;
UINT32 AddrOffset = 0;
MEDIA_SEARCH_INFO_STRUCT SearchInfo[CHILD_CHAIN_NUM];
switch (SearchType)
{
case ALLMUSIC_SEARCH:
AddrOffset = SEARCH_INFO_ALL_MUISIC_ADDR;
break;
case ARTIST_SEARCH:
AddrOffset = SEARCH_INFO_ARTIST_ADDR;
break;
case ALBUM_SEARCH:
AddrOffset = SEARCH_INFO_ALBUM_ADDR;
break;
case TITLE_SEARCH:
AddrOffset = SEARCH_INFO_TITLE_ADDR;
break;
case GENRE_SEARCH:
AddrOffset = SEARCH_INFO_GENRE_ADDR;
break;
default:
break;
}
fFile = FS_fopen(SortInfoPath, "r");//FileInfoSavePath
if (fFile == NULL)
return 0;
FS_fseek(fFile, AddrOffset, FS_SEEK_SET); //
FS_fread(SearchInfo, sizeof(MEDIA_SEARCH_INFO_STRUCT), CHILD_CHAIN_NUM, fFile);
FS_fclose(fFile);
fFile = NULL;
if (FilterType <= Z_SEARCH)
{
SearchNum = SearchInfo[4+FilterType].ItemNum + SearchInfo[32+FilterType].ItemNum;
}
else if (FilterType == NUM_SEARCH)
{
SearchNum = SearchInfo[2].ItemNum;
}
else
{
SearchNum = SearchInfo[0].ItemNum + SearchInfo[1].ItemNum + SearchInfo[3].ItemNum +
SearchInfo[30].ItemNum + SearchInfo[31].ItemNum + SearchInfo[58].ItemNum;
}
return SearchNum;
}
/*----------------------------------------------------------------------
Name : GetSearchAllMusicInfo
Desc : 获取所有音乐中满足搜索条件文件
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetSearchAllMusicInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 FilterType)
{
FS_FILE* fFile = NULL;
UINT16 SearchNum = 0;
MEDIA_SEARCH_INFO_STRUCT SearchInfo[CHILD_CHAIN_NUM];
fFile = FS_fopen(SortInfoPath, "r");//FileInfoSavePath
if (fFile == NULL)
return ;
FS_fseek(fFile, SEARCH_INFO_ALL_MUISIC_ADDR, FS_SEEK_SET); //
FS_fread(SearchInfo, sizeof(MEDIA_SEARCH_INFO_STRUCT), CHILD_CHAIN_NUM, fFile);
FS_fclose(fFile);
fFile = NULL;
if (FilterType <= Z_SEARCH)
{
SearchNum = SearchInfo[4+FilterType].ItemNum;
if (uiID < SearchNum)
{
uiID += SearchInfo[4+FilterType].IndexID;
}
else
{
uiID = (uiID + SearchInfo[32+FilterType].IndexID) - SearchNum;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -