mawavcnv.c

来自「是一个手机功能的模拟程序」· C语言 代码 · 共 989 行 · 第 1/3 页

C
989
字号
	{
		return (MASMW_ERROR);
	}

	sdRet = MaSndDrv_Create((UINT32)MASMW_SEQTYPE_DIRECT,	/* Mode 						*/
							(UINT32)WAVE_TIMEBASE,			/* Timer Setting				*/
							1L,								/* Resource mode				*/
							0L,								/* Convert mode					*/
							1L,								/* Num of Stream				*/
							0xFFL,							/* AL mode						*/
							MaWavCnv_Convert,				/* Callback Fn					*/
							&dRam,							/* Top Address of Reseved RAM	*/
							&dSize);						/* Size of Reserved RAM			*/

	if (sdRet < 0) return (sdRet);

	gpWavInfo->sdSeqID	= sdRet;
	gpWavInfo->dMasterVol= 100;
	gpWavInfo->bPanpot	= 64;
	gpWavInfo->dLoops	= 0;
	gpWavInfo->dRepeat	= 1;
	gpWavInfo->sdSeekTime		= 0;
	gpWavInfo->sdCurrentTime	= 0;

	MaSndDrv_SetVolume(gpWavInfo->sdSeqID, gpWavInfo->dMasterVol, 4);
	MaSndDrv_SetCommand(gpWavInfo->sdSeqID, -1, MASNDDRV_CMD_MASTER_VOLUME, (UINT32)0x7F, 0, 0);

	return (MASMW_SUCCESS);
}


/*********************************************************************************
 *	Function Name	:	SINT32	MaWavCnv_Close(SINT32 sdFileID, void* pvExtArgs)
 *
 *	Description		:	Close()
 *
 *	Argument		:	sdFileID		: File ID
 *						pvExtArgs	: NULL
 *
 *	Return			: 0 : NoError, < 0 : Error
 *********************************************************************************/
SINT32	MaWavCnv_Close(SINT32 sdFileID, void* pvExtArgs)
{
	(void)pvExtArgs;

	MAWAVCNV_DBGMSG(("MaAudCnv_Close[%d] \n", sdFileID));

	if(	(sdFileID < 1)					||
		(MAWAVCNV_MAX_LOAD <= sdFileID)	||
		(gpWavInfo->DataInfo[sdFileID].bLoaded == 0))
	{
		return (MASMW_ERROR);
	}

	MaSndDrv_Free(gpWavInfo->sdSeqID);
	gpWavInfo->sdSeqID = -1;

	return (MASMW_SUCCESS);
}


/*********************************************************************************
 *	Function Name	:	SINT32	MaWavCnv_Standby(SINT32 sdFileID, void* pvExtArgs)
 *
 *	Description		:	Standby()
 *
 *	Argument		:	sdFileID		: File ID
 *						pvExtArgs	: NULL
 *
 *	Return			: 0 : NoError, < 0 : Error
 *********************************************************************************/
SINT32	MaWavCnv_Standby(SINT32 sdFileID, void* pvExtArgs)
{
	SINT32	sdRet;
	UINT32	dFormat;
	
	(void)pvExtArgs;

	MAWAVCNV_DBGMSG(("MaWavCnv_Standby[%08lX]\n", sdFileID));

	if(	(sdFileID < 1)					||
		(MAWAVCNV_MAX_LOAD <= sdFileID)	||
		(gpWavInfo->DataInfo[sdFileID].bLoaded == 0))
	{
		return (MASMW_ERROR);
	}
	
	if (gpWavInfo->DataInfo[sdFileID].dBit == 8)
	{
		dFormat = 0x02;														/* 8bit offset PCM */
	}
	else
	{
		dFormat = 0x04;														/* 16bit PCM */
	}
	if (gpWavInfo->DataInfo[sdFileID].dChannel == 2) dFormat |= 0x80;		/* Stereo */

	sdRet = MaSndDrv_SetStream(gpWavInfo->sdSeqID, 0, dFormat, gpWavInfo->DataInfo[sdFileID].dFs,
				 gpWavInfo->DataInfo[sdFileID].pbData, gpWavInfo->DataInfo[sdFileID].dSize);

	return (sdRet);
}


/*********************************************************************************
 *	Function Name	: SINT32	MaWavCnv_Seek(SINT32 sdFileID, UINT32 pos, void* pvExtArgs)
 *
 *	Description		: Seek() , Not Supported.
 *
 *	Argument		: sdFileID		: File ID
 *					  pos			: Start position(msec)
 *					  pvExtArgs		: NULL
 *
 *	Return			: 0 : NoError, < 0 : Error
 *********************************************************************************/
SINT32	MaWavCnv_Seek(SINT32 sdFileID, UINT32 dPos, void* pvExtArgs)
{
	(void)pvExtArgs;

	MAWAVCNV_DBGMSG(("MaWavCnv_Seek[%08lX] = %ld \n", sdFileID, dPos));

	if(	(sdFileID < 1)					||
		(MAWAVCNV_MAX_LOAD <= sdFileID)	||
		(gpWavInfo->DataInfo[sdFileID].bLoaded == 0))
	{
		return (MASMW_ERROR);
	}
	gpWavInfo->sdSeekTime		= dPos;
	gpWavInfo->sdCurrentTime	= dPos;

	/* control sequencer */
	MaSndDrv_SetCommand(gpWavInfo->sdSeqID, -1, MASNDDRV_CMD_STREAM_SEEK, 0, 0, GetBytePos(sdFileID, dPos));
	MaSndDrv_ControlSequencer(gpWavInfo->sdSeqID, 4);

	return (MASMW_SUCCESS);
}


/*********************************************************************************
 *	Function Name	:	SINT32	MaWavCnv_Start(SINT32 sdFileID, void* pvExtArgs)
 *
 *	Description		:	Start()
 *
 *	Argument		:	sdFileID		: File ID
 *						pvExtArgs	: NULL
 *
 *	Return			: 0 : NoError, < 0 : Error
 *********************************************************************************/
SINT32	MaWavCnv_Start(SINT32 sdFileID, void* pvExtArgs)
{
	(void)pvExtArgs;

	MAWAVCNV_DBGMSG(("MaWavCnv_Start[%d] \n", sdFileID));

	if(	(sdFileID < 1)					||
		(MAWAVCNV_MAX_LOAD <= sdFileID)	||
		(gpWavInfo->DataInfo[sdFileID].bLoaded == 0))
	{
		return (MASMW_ERROR);
	}
	gpWavInfo->bPaused	= 0;
	gpWavInfo->sdCurrentTime = gpWavInfo->sdSeekTime;

	/* control sequencer */
	MaSndDrv_SetCommand(gpWavInfo->sdSeqID, -1, MASNDDRV_CMD_STREAM_PANPOT, 0, gpWavInfo->bPanpot, 0);
	MaSndDrv_SetCommand(gpWavInfo->sdSeqID, -1, MASNDDRV_CMD_STREAM_ON, 0, 0, 127);
	MaSndDrv_ControlSequencer(gpWavInfo->sdSeqID, 1);

	return (MASMW_SUCCESS);
}


/*********************************************************************************
 *	Function Name	:	SINT32	MaWavCnv_Stop(SINT32 sdFileID, void* pvExtArgs)
 *
 *	Description		:	Stop()
 *
 *	Argument		:	sdFileID		: File ID
 *						pvExtArgs	: NULL
 *
 *	Return			: 0 : NoError, < 0 : Error
 *********************************************************************************/
SINT32	MaWavCnv_Stop(SINT32 sdFileID, void* pvExtArgs)
{
	(void)pvExtArgs;

	MAWAVCNV_DBGMSG(("MaWavCnv_Stop[%d] \n", sdFileID));

	if(	(sdFileID < 1)					||
		(MAWAVCNV_MAX_LOAD <= sdFileID)	||
		(gpWavInfo->DataInfo[sdFileID].bLoaded == 0))
	{
		return (MASMW_ERROR);
	}

	/* control sequencer */
	MaSndDrv_ControlSequencer(gpWavInfo->sdSeqID, 0);
	MaSndDrv_SetCommand(gpWavInfo->sdSeqID, -1, MASNDDRV_CMD_STREAM_OFF, 0, 0, 0);

	gpWavInfo->sdSeekTime = 0;

	return (MASMW_SUCCESS);
}


/*********************************************************************************
 *	MaWavCnv_Pause
 *
 *	Description:
 *			play pause
 *	Argument:
 *			sdFile_id		file id
 *			pvExt_args		ignore
 *	Return:
 *			0				success
 *			< 0				error code
 ********************************************************************************/
SINT32 MaWavCnv_Pause( SINT32 sdFileID, void* pvExt_args )
{
	(void)pvExt_args;

	MAWAVCNV_DBGMSG(("MaWavCnv_Pause[%d] \n", sdFileID));

	if(	(sdFileID < 1)					||
		(MAWAVCNV_MAX_LOAD <= sdFileID)	||
		(gpWavInfo->DataInfo[sdFileID].bLoaded == 0))
	{
		return (MASMW_ERROR);
	}

	gpWavInfo->bPaused	= 1;

	return (MASMW_SUCCESS);
}


/*********************************************************************************
 *	Function Name	:	MaWavCnv_Restart
 *
 *	Description		:	Restart()
 *			play start
 *	Argument		:
 *						sdFile_id		file id
 *						pvExt_args		ignore
 *	Return			:	0: success, < 0	 error code
 ********************************************************************************/
SINT32	MaWavCnv_Restart( SINT32 sdFileID, void* pvExt_args )
{
	(void)pvExt_args;

	MAWAVCNV_DBGMSG(("MaWavCnv_Restart[%d] \n", sdFileID));

	if(	(sdFileID < 1)					||
		(MAWAVCNV_MAX_LOAD <= sdFileID)	||
		(gpWavInfo->DataInfo[sdFileID].bLoaded == 0))
	{
		return (MASMW_ERROR);
	}

	gpWavInfo->bPaused	= 2;

	return (MASMW_SUCCESS);
}


/*********************************************************************************
 *	Function Name	:	SINT32	MaWavCnv_Control(SINT32 sdFileID, UINT32 dCtrlNum, void* prm, void* pvExtArgs)
 *
 *	Description		:	Control
 *
 *	Argument		:	sdFileID		: File ID
 *						dCtrlNum		: Control command ID
 *						prm				: Parameters
 *						pvExtArgs		: NULL
 *
 *	Return			: 0 : NoError, < 0 : Error
 *********************************************************************************/
SINT32	MaWavCnv_Control(SINT32 sdFileID, UINT32 dCtrlNum, void* pvPrm, void* pvExtArgs)
{
	(void)pvExtArgs;

	MAWAVCNV_DBGMSG(("MaWavCnv_Control[%d, %d] \n", sdFileID, dCtrlNum));

	if(	(sdFileID < 0) || (MAWAVCNV_MAX_LOAD <= sdFileID))
	{
		return (MASMW_ERROR);
	}
	if (gpWavInfo->DataInfo[sdFileID].bLoaded == 0) return (MASMW_ERROR);

	switch(dCtrlNum)
	{
	case MASMW_GET_LENGTH :
		return ((SINT32)gpWavInfo->DataInfo[sdFileID].dLength);

	case MASMW_GET_POSITION :
		if(sdFileID < 1) {
			return (MASMW_ERROR_ARGUMENT);
		}
		if (gpWavInfo->DataInfo[sdFileID].dLength < (UINT32)gpWavInfo->sdCurrentTime) return ((SINT32)gpWavInfo->DataInfo[sdFileID].dLength);
		return (gpWavInfo->sdCurrentTime);

	case MASMW_SET_VOLUME :
		if(sdFileID < 1) {
			return (MASMW_ERROR_ARGUMENT);
		}
		return (MaWavCnv_SetVolume(sdFileID, *((UINT8*)pvPrm)));

	case MASMW_SET_PANPOT :
		if(sdFileID < 1) {
			return (MASMW_ERROR_ARGUMENT);
		}
		return (MaWavCnv_SetPanpot(sdFileID, *((UINT8*)pvPrm)));

	case MASMW_SET_REPEAT :
		if(sdFileID < 1) {
			return (MASMW_ERROR_ARGUMENT);
		}
		if (*((UINT32*)pvPrm) > 255 ) return MASMW_ERROR_ARGUMENT;
		gpWavInfo->dRepeat = *((UINT32*)pvPrm);
		gpWavInfo->dLoops = 0;
		return (MASMW_SUCCESS);

	case MASMW_GET_CONTENTSDATA :
		return GetContentsData(sdFileID, (PMASMW_CONTENTSINFO)pvPrm);
	}

	return (MASMW_ERROR);
}

⌨️ 快捷键说明

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