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

📄 voice.h

📁 好记星的控件,包括button,list,对文件操作
💻 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 + -