📄 audioconsle.c
字号:
//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 + -