⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediainfogetnew.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 3 页
字号:
    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 + -