📄 voice.h
字号:
/****************************************************************************/
/* */
/* Copyright (C) 2002 SHENZHEN MEIJIN CO.LTD */
/* */
/* FILE NAME: Voice.h */
/* MODULE NAME: Voice MODULE */
/* DESCRIPTION: Voice管理模块头文件 */
/* */
/****************************************************************************/
/* DATE AUTHOR VERSION REMARKS */
/* =========== =========== ========= =====================================*/
/* 2004-04-07 黄小明 Ver 1.00 创建 */
/****************************************************************************/
#ifndef __VOICE_H__
#define __VOICE_H__
#include "Audio.h"
//added by ju begin
//闹铃时,若果当前有播放声音,则闹铃响闹后原来的声音不会继续,
//故提供此借口。当闹铃时AP接收EVENT_ALARM消息,分别调用BackupCurrentVoice
//RestoreCurrentVoice来备份和恢复当前的声音
#define BACKVOICE_FUNC
// end
// Voice常量定义
//声音设备状态
#define VOICE_STATUS_INVALID 0 /* 无效 */
#define VOICE_STATUS_STOP 1 /* 停止 */
#define VOICE_STATUS_PLAY 2 /* 播放声音文件*/
#define VOICE_STATUS_PLAYPAUSE 3 /* 播放声音文件暂停 */
#define VOICE_STATUS_RECORD 4 /* 录制声音文件 */
#define VOICE_STATUS_RECORDPAUSE 5 /* 录制声音文件暂停 */
//声音播放类型
#define VOICE_TYPE_DEFAULT 0 /* 默认,按文件扩展名辨别 */
#define VOICE_TYPE_WAV 5 /* DAC播放 */
#define VOICE_TYPE_MP3 6 /* DAC播放 */
#define VOICE_TYPE_WMA 7 /* DAC播放 */
//声音播放模式
#define VOICE_MODE_FILENAME 1 /* 按文件名播放 */
#define VOICE_MODE_DATAOFFSET 2 /* 按数据地址播放 */
#define VOICE_MODE_BACKGROUND 4 /* 后台播放 */
#define VOICE_MODE_AUTOCLOSE 8 /* 播放结束后自动关闭 */
#define VOICE_MODE_CALLBACK 16 /* 按回调函数方式播放*/
//声音播放回调通知类型
#define VOICE_NOTIFY_PLAY_STOP 0x1 /* 自动播放结束 */
#define VOICE_NOTIFY_PLAY_BREAK 0x2 /* 播放被打断 */
#define VOICE_NOTIFY_OPEN_FAIL 0x3 /* 打开失败 */
#define VOICE_NOTIFY_PLAY_FAIL 0x4 /* 播放失败 */
#define VOICE_NOTIFY_BUFFER_USEUP 0X8 //播放buffer里的数据已经取完
#define VOICE_NOTIFY_RECORD_STOP 0x101 /* 录音结束 */
#define VOICE_NOTIFY_RECORD_BREAK 0x102 /* 录音被打断 */
#define VOICE_NOTIFY_RECORD_FULL 0x103 /* 录音空间满 */
#define VOICE_NOTIFY_REFRESH 0x201 /* 刷新显示 */
#define VOICELIST_NOTIFY_PLAYEND 0x301 /* 列表播放结束*/
#define VOICE_DRV_TYPE_AUDIO 0
#define VOICE_DRV_TYPE_ACM 1
#define VOICE_DRV_TYPE_MAX 2
// Voice数据结构定义
//Voice播放句柄*/
typedef INT VoiceHandle; /*和文件句柄类似,小于0非法*/
//Voice播放参数
typedef struct
{
UINT8 playType; /* 播放类型 */
UINT8 playMode; /* 播放模式(文件名模式或地址模式) */
UINT8* pDataSource; /* 文件名或地址 */
UINT32 dwPlayStart; /* 播放开始位置 */
UINT32 dwPlayLength; /* 播放长度 */
UINT16 dwPlayCycles; /* 播放循环次数,0表示永不停止 */
VOID *pCallBackFunc; /* 播放回调函数 */
//内部使用的参数
UINT8 szFileName[FILE_MAX_NAMELEN + 1];
MMIOINFO mmioInfo;
HMEDIAFILE hMediaFile; /* 播放文件句柄 */
UINT8 wfx_buf[WAVEFORMATEX_MAXLEN];
UINT32 dwFileLength; /* 文件文件总长度 */
UINT32 dwPlayEnd; /* 播放结束位置 */
UINT32 dwPlayOffset; /* 当前播放指针 */
UINT32 dwRetOffset; /* 当前播放指针 */
UINT32 dwHeadLength; /* 文件头长度 */
UINT32 dwLengthPerSec; /* 每秒数据长度 */
UINT32 dwFrameLength; /* 每桢数据长度 */
UINT32 dwTimeLength;
UINT32 dwSrcBufferSize; /* 数据缓冲区大小 */
UINT8* pSrcBuffer; /* 读数据缓冲区 */
UINT32 dwDstBufferSize; /* 数据缓冲区大小 */
UINT8* pDstBuffer; /* 读数据缓冲区 */
UINT8 voiceStatus; /* 当前状态 */
UINT8 bListSuspend; /* 如果停止,文件自动关闭 */
NU_DRIVER *pAudioDrv;
NU_DRIVER *pAcmDrv;
} MVoicePlayParam;
//音效参数
typedef struct
{
UINT8 bass;
UINT8 by3D;
UINT8 byEQ;
}MVoiceEffect;
//Voice录音参数
typedef struct
{
UINT8 recordType; /* 录音类型 */
UINT8* pRecordBuf; /* 录音Buf地址*/
UINT32 dwBufLength; /* 录音Buf长度 */
VOID *pCallBackFunc; /* 录音回调函数 */
//内部使用的参数
UINT32 dwRecordOffset; /* 播放结束位置 */
UINT32 dwBufferSize; /* 数据缓冲区大小 */
UINT8* pBuffer; /* 写数据缓冲区 */
UINT8* pData; /* 自定义数据结构 */
UINT8 voiceStatus; /* 当前状态 */
} MVoiceRecordParam;
/*
* Voice函数声明
*/
OS_DLL BOOL VoiceModInitial(VOID);
OS_DLL BOOL VoiceModTerminate(VOID);
OS_DLL BOOL VoiceGetParam(VoiceHandle voiceHandle, MVoicePlayParam* pVoicePlayParam);
OS_DLL BOOL VoiceSetParam(VoiceHandle voiceHandle, MVoicePlayParam* pVoicePlayParam);
OS_DLL BOOL VoiceSetEffect(MVoiceEffect *pVoiceEffect);
OS_DLL BOOL VoiceGetEffect(MVoiceEffect *pVoiceEffect);
OS_DLL VoiceHandle VoiceOpen(MVoicePlayParam *pVoicePlayParam);
OS_DLL BOOL VoicePlay(VoiceHandle voiceHandle);
OS_DLL BOOL VoicePause(VoiceHandle voiceHandle);
OS_DLL BOOL VoiceResume(VoiceHandle voiceHandle);
OS_DLL BOOL VoiceStop(VoiceHandle voiceHandle);
OS_DLL BOOL VoiceClose(VoiceHandle voiceHandle);
OS_DLL BOOL VoiceCloseAll(VOID);
OS_DLL BOOL VoiceIsRun(VOID);
OS_DLL BOOL VoiceGetFileInfo(MVoicePlayParam *pVoicePlayParam);
OS_DLL VoiceHandle VoicePlayStart(MVoicePlayParam *pVoicePlayParam);
OS_DLL BOOL VoicePlayStop(VoiceHandle voiceHandle);
///////////////////////////////////////////////////////////////////////////////////////
// added by ju begin
#ifdef BACKVOICE_FUNC
//闹铃时,若果当前有播放声音,则闹铃响闹后原来的声音不会继续,
//故提供此借口。当闹铃时AP接收EVENT_ALARM消息,分别调用BackupCurrentVoice
//RestoreCurrentVoice来备份和恢复当前的声音
BOOL BackupCurrentVoice(VOID );
BOOL RestoreCurrentVoice(VOID );
#endif
// end
///////////////////////////////////////////////////////////////////////////////////////
// VoiceList 头文件
//////////////////////////////////////////////////////////////////////////////////////
//For Ed109, 最多50个文件列表,如果100个要申请很大内存,导致USB无法申请到内存
//For Ed121, Ram is so enough to alloc memory for 500 files
//For Ed136, Ram is so enough to alloc memory for 100 files
#define VOICE_LIST_MAX_FILENUM 100
#define VOICE_LIST_MAX_BUFLEN 6000
//循环方式
#define VOICE_LIST_PLAYMODE_NOCYCLE 0 /* 非循环播放 */
#define VOICE_LIST_PLAYMODE_CYCLE 1 /* 循环播放 */
//选曲方式
#define VOICE_LIST_PLAYSEL_ORDER 0 /* 顺序播放 */
#define VOICE_LIST_PLAYSEL_RANDOM 1 /* 随机播放 */
//VoiceList播放设备状态
#define VOICE_LIST_DEVICE_PLAY 1 /* 播放 */
#define VOICE_LIST_DEVICE_PAUSE 2 /* 暂停 */
#define VOICE_LIST_DEVICE_STOP 3 /* 停止 */
#define VOICE_LIST_DEVICE_RECORD 4 /* 录音 */
#define VOICE_LIST_DEVICE_SUSPEND 0x80 /* 打断 */
//播放参数设置时的设置选择
#define VOICE_LIST_SET_PLAYMOD 0x01 /* 设置播放模式 */
#define VOICE_LIST_SET_PLAYORDER 0x02 /* 设置播放顺序 */
#define VOICE_LIST_SET_PLAYOFFSET 0x4 /* 设置播放结束时间 */
#define VOICE_LIST_SET_CALLBACK 0x8 /* 设置播放回调函数 */
//定义VoiceList播放队列消息类型
#define VOICE_LIST_COMMAND_OPEN 0x1000
#define VOICE_LIST_COMMAND_PLAY 0x1001
#define VOICE_LIST_COMMAND_PAUSE 0x1002
#define VOICE_LIST_COMMAND_RESUME 0x1003
#define VOICE_LIST_COMMAND_STOP 0x1004
#define VOICE_LIST_COMMAND_PLAYCYCLE 0x1007
#define VOICE_LIST_COMMAND_SUSPEND 0x1008
#define VOICE_LIST_COMMAND_CONTINUE 0x1009
#define VOICE_LIST_COMMAND_CLOSE 0x100A
#define VOICE_LIST_COMMAND_PLAYBACK 0X100B
//skip max range
#define VOICE_LIST_SKIP_MAX 0x1000
// VOICE_LIST_COMMAND_PLAYPREV use 0x2000--0x3000
#define VOICE_LIST_COMMAND_PLAYPREV 0x2000
// VOICE_LIST_COMMAND_PLAYPREV use 0x3000--0x4000
#define VOICE_LIST_COMMAND_PLAYNEXT 0x3000
#define VoiceListPlayBack() VoiceListCommand(VOICE_LIST_COMMAND_PLAYBACK)
#define VoiceListOpen() VoiceListCommand(VOICE_LIST_COMMAND_OPEN)
#define VoiceListPlay() VoiceListCommand(VOICE_LIST_COMMAND_PLAY)
#define VoiceListPause() VoiceListCommand(VOICE_LIST_COMMAND_PAUSE)
#define VoiceListResume() VoiceListCommand(VOICE_LIST_COMMAND_RESUME)
#define VoiceListStop() VoiceListCommand(VOICE_LIST_COMMAND_STOP)
#define VoiceListClose() VoiceListCommand(VOICE_LIST_COMMAND_CLOSE)
#define VoiceListPlayPrev(a) VoiceListCommand(VOICE_LIST_COMMAND_PLAYPREV + a - 1)
#define VoiceListSuspend() VoiceListCommand(VOICE_LIST_COMMAND_SUSPEND)
#define VoiceListContinue() VoiceListCommand(VOICE_LIST_COMMAND_CONTINUE)
#define VoiceListPlayNext(a) VoiceListCommand(VOICE_LIST_COMMAND_PLAYNEXT + a - 1)
// 数据结构定义
typedef struct tagVoiceList /*播放文件列表*/
{
UINT16 wFileNum; /* 文件数目 */
UINT8 szListPath[FILE_MAX_NAMELEN]; /* 列表路径*/
UINT16 wFileNameTable[VOICE_LIST_MAX_FILENUM + 1]; /* 文件名地址表*/
UINT8 FileNameBuf[VOICE_LIST_MAX_BUFLEN]; /* 文件名BUFFER */
} VoiceList;
typedef struct tagVoiceListPlayParam /*播放状态*/
{ //可设置参数
UINT16 wPlayMode; // 播放模式(循环、非循环)
UINT16 wPlaySel; // 选曲方式(顺序、随机)
//播放程序播放过程中自动修改的参数
UINT16 wPlayStatus; // 当前播放设备状态
UINT16 wPlayCur; // 当前播放的文件序号,从0开始
VOID *pCallBackFunc; /* 播放回调函数 */
MVoicePlayParam voicePlayParam; // 当前播放文件的相关信息 */
} VoiceListPlayParam;
/*
* VoiceList函数声明
*/
BOOL __VoiceListInitial(VOID);
BOOL __VoiceListProcess(UINT32 dwMsgType);
BOOL __VoiceListSuspend(VOID);
BOOL __VoiceListContinue(VOID);
OS_DLL BOOL VoiceListSet(VoiceList* voiceList);
OS_DLL BOOL VoiceListGet(VoiceList** voiceList);
OS_DLL BOOL VoiceListPlayParamSet(VoiceListPlayParam* voiceListPlayParam, UINT32 dwMask);
OS_DLL BOOL VoiceListPlayParamGet(VoiceListPlayParam* voiceListPlayParam);
OS_DLL BOOL VoiceListCommand(UINT32 dwVoiceListCommand);
#endif /* #ifndef __VOICE_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -