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

📄 mediainfogetnew.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 3 页
字号:
        }
    }
    else if (FilterType == NUM_SEARCH)
    {
        uiID += SearchInfo[2].IndexID;
    }
    else
    {
        if (uiID < SearchInfo[0].ItemNum)
        {
            uiID = uiID + SearchInfo[0].IndexID;
        }
        else if (uiID < SearchInfo[0].ItemNum + SearchInfo[1].ItemNum)
        {
            uiID = uiID + SearchInfo[1].IndexID - SearchInfo[0].ItemNum;
        }
        else if (uiID < SearchInfo[0].ItemNum + SearchInfo[1].ItemNum + SearchInfo[3].ItemNum)
        {
            uiID = uiID + SearchInfo[3].IndexID - SearchInfo[0].ItemNum - SearchInfo[1].ItemNum;
        }
        else if (uiID < SearchInfo[0].ItemNum + SearchInfo[1].ItemNum + SearchInfo[3].ItemNum + SearchInfo[30].ItemNum)
        {
            uiID = uiID + SearchInfo[30].IndexID - SearchInfo[0].ItemNum - SearchInfo[1].ItemNum - SearchInfo[3].ItemNum;
        }
        else if (uiID < SearchInfo[0].ItemNum + SearchInfo[1].ItemNum + SearchInfo[3].ItemNum + SearchInfo[30].ItemNum + SearchInfo[31].ItemNum)
        {
            uiID = uiID + SearchInfo[31].IndexID - SearchInfo[0].ItemNum - SearchInfo[1].ItemNum - SearchInfo[3].ItemNum - SearchInfo[30].ItemNum;
        }
        else
        {
            uiID = uiID + SearchInfo[58].IndexID - SearchInfo[0].ItemNum - SearchInfo[1].ItemNum - SearchInfo[3].ItemNum - SearchInfo[30].ItemNum - SearchInfo[31].ItemNum;
        }
    }

    GetMediaALLMusicInfo(pMediaInfo, uiID, 0);
}

/*----------------------------------------------------------------------
Name  :  SearchFun
Desc  :  获取unicode字符对应字符拼音首个字母
Params:  Word:unicode字符
Return:
Author:  phc
Date  :  07-12-23
----------------------------------------------------------------------*/
char GetWordFirstLetter(UINT16 Word)
{
    UINT16 i = 0;

    if (Word >= 'A' && Word <= 'Z') // 'A' ~ 'Z'
    {
        return (char)Word;
    }
    else if (Word >= 'a' && Word <= 'z') // 'a' ~ 'z'
    {
        return (char)(Word - 32);
    }
    else if (Word >= 0x4E00 && Word <= 0x9fa4)
    {
        Word = GetCmpResult(Word); // 转化为对应拼音值
        for (i = 0;i < 26;i++)
        {
            if (Word <= SearchKey[i+32])
                return (char)(i + 'A');
        }
    }
    else
    {

        return 0;
    }
}

/*----------------------------------------------------------------------
Name  :  SearchFun
Desc  :  根据输入,获取所有音乐中满足搜索条件文件
Params:  ptr:首字母字符串
Return:  满足条件文件个数
Author:  phc
Date  :  07-12-23
----------------------------------------------------------------------*/
UINT16 SearchFun(char *ptr)
{
    UINT16 i = 0, j = 0;
    UINT16 FilterType = 0;
    UINT16 FileNum0 = 0; // 首个字符满足个数
    UINT16 Temp = 0;
    UINT16 uiID = 0;
    UINT16 SearchResult = 0;
    FS_FILE* fFile = NULL;
    MEDIA_SEARCH_INFO_STRUCT SearchInfo[CHILD_CHAIN_NUM];

    MEDIA_SORT_INFO_STRUCT SortIndex;
    FILE_SAVE_STRUCT FileInfo;


    if (ptr[0] == '\0')
        return 0;

    fFile = FS_fopen(SortInfoPath, "r");//FileInfoSavePath
    if (fFile == NULL)
        return 0;
    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;


#ifdef  PYSORT_ENABLE
    if (TRUE != LoadPYTable(&pPYTableBuff, PYTablePath))
        return 0;
#endif

    RKmemset(SearchIndexBuffer, 0, sizeof(SearchIndexBuffer)); // 清空搜索buffer

    FilterType = ptr[0] - 'A';
    FileNum0 = GetSearchTotalNum(ALLMUSIC_SEARCH, FilterType); // 在所有音乐中,获取首个字符满足条件的文件数

    Temp = SearchInfo[4+FilterType].ItemNum;
    for (i = 0;i < FileNum0;i++)
    {
        RKmemset(&SortIndex, 0, sizeof(MEDIA_SORT_INFO_STRUCT));
        RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
        j = 0;

        if (i < Temp)
        {
            uiID = i + SearchInfo[4+FilterType].IndexID;
        }
        else
        {
            uiID = (i + SearchInfo[32+FilterType].IndexID) - Temp;
        }

        GetSortInfo(&SortIndex, uiID, All_SORT_ADDR);
        GetSaveFileInfo(&FileInfo, SortIndex.FileSearchID);
        while (ptr[j] != '\0')
        {
            if (ptr[j] != GetWordFirstLetter(FileInfo.LongFileName[j]))
                break;
            j++;
        }
        if (ptr[j] == '\0')
        {
            SearchIndexBuffer[SearchResult] = SortIndex.FileSearchID;
            SearchResult++;
        }

    }

#ifdef  PYSORT_ENABLE
    FreePYTable(pPYTableBuff);
    pPYTableBuff = NULL;
#endif

    return SearchResult;
}


/*----------------------------------------------------------------------
Name  :  GetMusicInfoBySearchString
Desc  :  根据搜索字符串,在检索出的文件中读取文件信息
Params:  pMediaInfo:文件列出信息 uiID:文件排序号  uiBaseID:排序基号,在这里无用
Return:
Author:  phc
Date  :  07-12-23
----------------------------------------------------------------------*/
void GetMusicInfoBySearchString(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
    FILE_SAVE_STRUCT FileInfo;

    uiID = SearchIndexBuffer[uiID];

    RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
    GetSaveFileInfo(&FileInfo, uiID);

    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->Name, FileInfo.Name, 11);
    RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);

}

/*----------------------------------------------------------------------
Name  :  GetSearchPlayMusic
Desc  :  播放搜索音乐时,读取搜索播放列表的音乐信息, 该信息不会应重新搜索音乐而改变,只在重新点击搜索音乐播放时会改变
Params:  pMediaInfo:文件列出信息 uiID:文件排序号  uiBaseID:排序基号,在这里无用
Return:
Author:  phc
Date  :  07-12-23
----------------------------------------------------------------------*/
void GetSearchPlayMusic(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
    FILE_SAVE_STRUCT FileInfo;

    uiID = SearchPlayBuffer[uiID];

    RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
    GetSaveFileInfo(&FileInfo, uiID);

    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->Name, FileInfo.Name, 11);
    RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);

}

/*----------------------------------------------------------------------
Name  :  CopySearchInfoToPlayBuffer
Desc  :  将搜索信息拷贝到播放buffer中
Params:
Return:
Author:  phc
Date  :  07-12-24
----------------------------------------------------------------------*/
void CopySearchInfoToPlayBuffer(void)
{
    RKmemset(SearchPlayBuffer, 0, sizeof(SearchPlayBuffer));
    RKmemcpy(SearchPlayBuffer, SearchIndexBuffer, sizeof(SearchPlayBuffer));
}


/* ---------------------------------------------------------------------------------------------------------------
                            ----------- 媒体库统计信息获取 ------------
------------------------------------------------------------------------------------------------------------------*/



/*----------------------------------------------------------------------
Name  :  MediaStatInfoLoad
Desc  :  获取媒体库统计信息
Params:  pMediaStatInfo:统计信息结构体
Return:
Author:  phc
Date  :  07-10-26
----------------------------------------------------------------------*/
void MediaStatInfoLoad(MEDIA_STAT_STRUCT *pMediaStatInfo)
{
#if 0
    MEDIA_STAT_STRUCT        *ptr;
    char MediaStatKey[] = "MEDIASORT\\MEDIASTAINFO";

    ptr = (MEDIA_STAT_STRUCT*)RKRegisterGetKeyValueEx(MediaStatKey, NULL);;
    if (ptr == NULL)
    {
        RKEY key = RKRegisterAddKey(MediaStatKey, sizeof(MEDIA_STAT_STRUCT));
        //ptr = (IMAGECONFIG*)RegisterGetRKEYData(MediaStatKey, NULL );
        RKmemset(ptr, 0, sizeof(MEDIA_STAT_STRUCT));
    }
    RKmemcpy(pMediaStatInfo, ptr, sizeof(MEDIA_STAT_STRUCT));
#else
    FS_FILE* fFile = NULL;
    char *pPath = SortStaInfoPath;

    RKmemset(pMediaStatInfo, 0, sizeof(MEDIA_STAT_STRUCT));

    fFile = FS_fopen(pPath, "r");
    if (fFile != NULL)
    {
        FS_fread(pMediaStatInfo, sizeof(MEDIA_STAT_STRUCT), 1, fFile);
        FS_fclose(fFile);
    }


#endif
}

/*----------------------------------------------------------------------
Name  :  MediaStatInfoSave
Desc  :  保存媒体库统计信息到注册表中
Params:  pMediaStatInfo:统计信息结构体
Return:
Author:  phc
Date  :  07-10-26
----------------------------------------------------------------------*/
void MediaStatInfoSave(MEDIA_STAT_STRUCT *pMediaStatInfo)
{
#if 0// 注册表方式写入
    MEDIA_STAT_STRUCT        *ptr;
    char MediaStatKey[] = "MEDIASORT\\MEDIASTAINFO";

    ptr = (MEDIA_STAT_STRUCT*)RKRegisterGetKeyValueEx(MediaStatKey, NULL);;
    if (ptr == NULL)
    {
        RKEY key = RKRegisterAddKey(MediaStatKey, sizeof(MEDIA_STAT_STRUCT));
        //ptr = (IMAGECONFIG*)RegisterGetRKEYData(MediaStatKey, NULL );
    }
    RKmemcpy(ptr, pMediaStatInfo, sizeof(MEDIA_STAT_STRUCT));
#else
    FS_FILE* fFile = NULL;
    char *pPath = SortStaInfoPath;

    fFile = FS_fopen(pPath, "rb+");
    if (fFile == NULL)
    {
        fFile = FSFileOpen(pPath, "wb");
    }
    else
    {
        FSFileSeek(fFile, 0, SEEK_SET); // 定位到最前面
    }

    if (fFile != NULL)
    {
        FS_fwrite(pMediaStatInfo, sizeof(MEDIA_STAT_STRUCT), 1, fFile);
        FS_fclose(fFile);
    }
#endif

}

#endif

/*----------------------------------------------------------------------
Name  :  IsMediaNeedChange
Desc  :  媒体库是否需要更新标志获取
Params:  FlagVal:更新标志,0代表无需更新或更新完毕, 1代表等待更新
Return:
Author:  phc
Date  :  07-12-20
----------------------------------------------------------------------*/
void SetMediaChangeFlag(UINT16 FlagVal)
{
#if 0
    UINT16        *pFlag = NULL;
    char MediaChangeKey[] = "MEDSOT\\SOTFLAG";

    pFlag = (UINT16*)RKRegisterGetKeyValueEx(MediaChangeKey, NULL);
    if (pFlag == NULL)
    {
        RKEY key = RKRegisterAddKey(MediaChangeKey, sizeof(UINT16));
        pFlag = (UINT16*)RKRegisterGetKeyValueEx(MediaChangeKey, NULL);
    }

    *pFlag = FlagVal;
#else
    gInitSysConfig.UpdateMediaLib = FlagVal;
#endif
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -