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

📄 audioconsle.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
//1音频控制部分
#include "include.h"

//080520,huangsl,修改包含路径,用于 PC仿真编译,保留.
#include "..\application\audio\buffer\buffer.h"
#include "..\application\audio\include\file_access.h"
#include "..\application\audio\include\audio_Globals.h"
#include "AudioControl.h"
#include "..\application\AudioWin\AudioWin.h"

#if AUDIOCONSOLE
#include "../../browser/BrowserStruct.h"
#include "../../browser/browsermacro.h"
typedef void(*AUDIOGETNUM)(UINT16);
#define MAX_AUDIO_FILES 4096
#define MAX_FLAG_MEMO (MAX_AUDIO_FILES>>3)
char AudioFileScanFlag[MAX_FLAG_MEMO];
BOOLEAN AudioFindValidateFile = FALSE;
#ifdef BOARD
WINDOW* pAudioWin = NULL;
REG_AUDIOCONFIG* pAudioRegKey = NULL;
#else
extern REG_AUDIOCONFIG* pAudioRegKey;
extern WINDOW* pAudioWin;
#endif
extern WINDOW* pAudioWin;
extern AUDIOCONTROL AudioPlayInfo;

extern unsigned char   CurrentCodec;
extern INT16U AudioPlayState;
extern UINT16 AudioLongPath[ ];  // 记录长路径
extern int AudioKeyFlag;
extern int AudioWinShow;
extern uint32  SDCardInsert;
PWINDOW WindowGetFocusWin(void);
void AudioErrFileSetbit(int bit, char* flagBuf);


extern void FileFuncInit(void);
extern void *RKmemcpy(void * s1, const void * s2, size_t n);
extern int RKstrcmp(const char * s1, const char * s2);
extern char *RKstrcat(char * s1, const char * s2);
extern MY_FILE    *RKFSFileOpen(const char *filename, const char *mode);
extern UINT8 RockGetRamdom(void);



//UINT16 pAudioPlaying;
extern UINT16  FirstErrorFlag;

SYS_FILE_INFO AudioFileInfo;
UINT16 AudioTryEnd = 0;
UINT16 AudioStartFileNo = 0;
UINT16 Audio_PMU[] =
{
#ifdef MP3_INCLUDE
    PMU_MP3,
#endif
#ifdef WMA_INCLUDE
    PMU_WMA,
#endif
#ifdef  MP2_INCLUDE
    PMU_MP3,
#endif
#ifdef OGG_DEC_INCLUDE
    PMU_OGG,
#endif
#ifdef WAV_INCLUDE
    PMU_WAV,
#endif
#ifdef MP4_INCLUDE
    PMU_APE,
#endif
#ifdef  M3U_INCLUDE
    PMU_MAINMENU,
#endif
#ifdef MP3_ENC_INCLUDE
    PMU_MAINMENU,
#endif
#ifdef WMA_ENC_INCLUDE
    PMU_RECORDMP3,
#endif
#ifdef RM_DEC_INCLUDE //added by vincent
    PMU_RA,
#endif
#ifdef APE_DEC_INCLUDE //added by hxd 20070710
    PMU_APE,
#endif
#ifdef FLAC_DEC_INCLUDE //注册flacdec接口函数名,通过接口索引CODEC_FLAC_DEC来定位 added by hxd 20070717
    PMU_FLAC,
#endif
#ifdef AAC_DEC_INCLUDE
    PMU_AAC,
#endif
};
char AudioType[][4] =  /*按出现频率排列,可能要调整codec次序*/
{
#ifdef MP3_INCLUDE
    "MP3",
#endif
#ifdef WMA_INCLUDE
    "WMA",
#endif
#ifdef  MP2_INCLUDE
    "MP2",
#endif
#ifdef OGG_DEC_INCLUDE
    "OGG",
#endif
#ifdef WAV_INCLUDE
    "WAV",
#endif
#ifdef MP4_INCLUDE
    "MP4",
#endif
#ifdef  M3U_INCLUDE
    "RES",//M3U
#endif
#ifdef MP3_ENC_INCLUDE
    "RES",
#endif
#ifdef WMA_ENC_INCLUDE
    "RES",
#endif
#ifdef RM_DEC_INCLUDE //added by vincent
    "RM ",
#endif
#ifdef APE_DEC_INCLUDE //added by hxd 20070710
    "APE",
#endif
#ifdef FLAC_DEC_INCLUDE //注册flacdec接口函数名,通过接口索引CODEC_FLAC_DEC来定位 added by hxd 20070717
    "FLA",
#endif
#ifdef AAC_DEC_INCLUDE
    "AAC",
#endif
#ifdef AC3_DEC_INCLUDE
    "AC3"
#endif

    ""//must be last
};
#if 0
/**************************************************************************
* 函数描述:  后台播放启动初始化
* 入口参数:  无
* 出口参数:  无
* 返回值:    true/false
* 注释:      初始化控制台,音频控制相关的需保存参数在这里初始化
***************************************************************************/
BOOLEAN AudioSwitch(BOOLEAN onoff)
{
    UINT16 ret = 0;
    if (onoff)
    {
        if (AudioPlaying())
            return TRUE;
        LOGICUPDATE_DISABLE();
        //  if(0 == HoldMusicCheck())
        //      ReadHoldOnInfo();
        ret = HoldMusicCheck();
        if (ret)
            HoldMusicStart(ret - 1);
        else
        {
            SelectModule(NULL, 0);
            WindowSendMessage(WindowGetFocusWin(), WM_KEY, KE_MENU_RELEASE, NULL);
            WindowSendMessage(WindowGetFocusWin(), WM_KEY, KE_MENU_RELEASE, NULL);
            WindowAppSwitch();
        }
        WindowAppSwitch();
        LOGICUPDATE_ENABLE();
    }
    else
    {
        if (AudioPlaying())
            RockOSSendMsg(MBAUDIO, AS_GUAU_Stop, (void*)1);
    }
    return TRUE;
}
#endif
/**************************************************************************
* 函数描述:  启动后台播放控制台
* 入口参数:  无
* 出口参数:  无
* 返回值:    true/false
* 注释:      启动控制台,音频控制相关的需保存参数在这里初始化
***************************************************************************/
BOOLEAN AudioConsoleStart(void* msg)
{
    FileFuncInit();
    RKmemcpy(&AudioIOBuf.EffectCtl, &pAudioRegKey->UserEQ, sizeof(tEffect));
    RKmemcpy(&AudioFileInfo, msg, sizeof(SYS_FILE_INFO));
    AudioFindValidateFile = FALSE;
    RKmemset(AudioFileScanFlag, 0, MAX_FLAG_MEMO);
    return TRUE;
}
/**************************************************************************
* 函数描述:  关闭后台播放控制台
* 入口参数:  无
* 出口参数:  无
* 返回值:    true/false
* 注释:      反初始化控制台,音频控制相关的参数如需保存在这里做
***************************************************************************/
BOOLEAN AudioConsoleShutDown(void)
{
    RockOSSendMsg(MBAUDIO, AS_GUAU_Stop, NULL);
    return TRUE;
}

/**************************************************************************
* 函数描述:  音频获取文件类型
* 入口参数:  FileName -- 短文件名
* 出口参数:  无
* 返回值:   算法的index
* 注释:     需要整理算法中各模块的index
            本函数中算法按使用频度排列
***************************************************************************/
UINT16 AudioGetFIleType(char* FileName)
{
    UINT16 cnt = 0;
    UINT16 ret = 0xffff;
    char* p2suffix = &FileName[8];
    char suffix[4];

    while (*p2suffix)
    {
        if ((*p2suffix >= 'a') && (*p2suffix <= 'z'))
        {
            *p2suffix -= 32;//32 == 'a'-'A'
        }
        p2suffix++;
    }
    RKmemcpy(suffix, &FileName[8], 3);
    suffix[3] = 0;
    while (*AudioType[cnt])
    {
        if (0 == RKstrcmp(AudioType[cnt], suffix))
        {
            ret = cnt;
            break;
        }
        cnt++;
    }
    return ret;
}
/**************************************************************************
* 函数描述:  音频文件验证
* 入口参数:  data--暂存储媒体文件信息
* 出口参数:  无
* 返回值:    文件句柄,若出错返回无效的文件句柄
* 注释:      验证文件是否支持

***************************************************************************/
extern UINT16 AudioPathTemp[];
void AudioMediaValidate(void* data)
{
    char pathname[FS_MAX_PATH_LEN];
    char buffer[20];
    MY_FILE* handle;
    PMU_ExitModule(Audio_PMU[CurrentCodec]);
    CurrentCodec = AudioGetFIleType(AudioFileInfo.Name);
    //if(CurrentCodec<NUMCODECS)
    //    PMU_EnterModule(Audio_PMU[CurrentCodec]);
    //else return;
    if (data)
    {
        RKmemcpy(&AudioFileInfo, data, sizeof(SYS_FILE_INFO));
        RKmemcpy(AudioLongPath, AudioFileInfo.pLongPath, FS_MAX_NAME_LENGTH*FS_MAX_DIR_DEPTH + 5);
        RKmemcpy(AudioPathTemp,AudioLongPath,  FS_MAX_NAME_LENGTH*FS_MAX_DIR_DEPTH + 5);
        AudioErrFileSetbit(AudioFileInfo.CurrentFileNum - 1, AudioFileScanFlag);
    }
    RKmemcpy(pathname, AudioFileInfo.Path, FS_MAX_PATH_LEN);
    RKstrcat(pathname, AudioFileInfo.Name);
    handle = (MY_FILE*)RKFSFileOpen(pathname, "r");
    if (handle)
    {

⌨️ 快捷键说明

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