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

📄 mawavcnv.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:

	gpWavInfo = &gWavInfo;

	gpWavInfo->sdSeqID	= -1;
	gpWavInfo->dMasterVol	= 100;
	gpWavInfo->bPanpot	= 64;
	gpWavInfo->dLoops	= 0;
	gpWavInfo->dRepeat	= 1;
	gpWavInfo->sdSeekTime		= 0;
	gpWavInfo->sdCurrentTime	= 0;
	for(nIdx = 0; nIdx < MAWAVCNV_MAX_LOAD; nIdx++) {
		pWi = &(gpWavInfo->DataInfo[nIdx]);
		pWi->bLoaded	= 0;
		pWi->pbData		= NULL;
		pWi->dSize		= 0L;
	}

	return (MASMW_SUCCESS);
}


/*********************************************************************************
 *	Function Name	:	SINT32	MaWavCnv_End(void)
 *
 *	Description		:	Ending()
 *
 *	Argument		:	none
 *
 *	Return			: 0 : NoError, < 0 : Error
 *********************************************************************************/
SINT32	MaWavCnv_End(void)
{
	MAWAVCNV_DBGMSG(("MaWavCnv_End \n"));

	return (MASMW_SUCCESS);
}


/*********************************************************************************
 *	Function Name	: SINT32	MaWavCnv_Convert(void)
 *
 *	Description		: Time count. 
 *					  MaWavCnv_Convert() is called every WAVE_TIMEBASE[ms].
 *
 *	Argument		: none
 *
 *	Return			: 0
 *********************************************************************************/
SINT32	MaWavCnv_Convert(void)
{
	return (0);
}


/*********************************************************************************
 *	Function Name	:	SINT32	MaWavCnv_Load(UINT8* file_ptr, UINT32 file_size, UINT8 bMode,
 *												SINT32 (*func)(UINT8 id), void* pvExtArgs)
 *
 *	Description		:	Load()
 *
 *	Argument		:	pbFilePtr	: pointer to the data
 *						dFileSize	: size fo the data
 *						bMode		: error check (0:No, 1:Yes, 2:Check)
 *						func		: pointer of rhe callback function
 *						pvExtArgs	: NULL
 *
 *	Return			: >= 0 : File ID, < 0 : Error
 *********************************************************************************/
SINT32	MaWavCnv_Load(UINT8* pbFilePtr, UINT32 dFileSize, UINT8 bMode, SINT32 (*func)(UINT8 id), void* pvExtArgs)
{
	SINT32	sdFileID;
	SINT32	sdRet;

	(void)func;
	(void)pvExtArgs;

	MAWAVCNV_DBGMSG(("MaWavCnv_Load[%08lX %08lX %02X] \n", pbFilePtr, dFileSize, bMode));

	if (pbFilePtr == NULL)	return (MASMW_ERROR);
	if (dFileSize == 0)		return (MASMW_ERROR);

	sdFileID = ((bMode < 2) ? 1 : 0);
	if(sdFileID == 0) {
		/*	load OK!!	*/
		gpWavInfo->DataInfo[0].bLoaded	= 0;
		gpWavInfo->DataInfo[0].pbData	= NULL;
		gpWavInfo->DataInfo[0].dSize	= 0L;
	}
	else {
		/*	Already loaded!!	*/
		if(gpWavInfo->DataInfo[sdFileID].bLoaded == 1) {
			return (MASMW_ERROR);
		}
	}

	/*	Format check	*/
	sdRet = WAVEChecker(sdFileID, pbFilePtr, dFileSize, (UINT32)bMode);
	if(sdRet < 0) return (sdRet);

	/*	Load Successful	*/
	gpWavInfo->DataInfo[sdFileID].bLoaded = 1;

	return (sdFileID);
}


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

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

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

	gpWavInfo->DataInfo[sdFileID].bLoaded	= 0;
	gpWavInfo->DataInfo[sdFileID].pbData	= NULL;
	gpWavInfo->DataInfo[sdFileID].dSize		= 0L;

	return (MASMW_SUCCESS);
}


/*********************************************************************************
 *	Function Name	:	MaWavCnv_Open(SINT32 sdFileID, UINT16 wMode, void* pvExtArgs)
 *
 *	Description		:	Open()
 *
 *	Argument		:	sdFileID	: File ID
 *						wMode		: Resouce mode
 *						pvExtArgs	: NULL
 *
 *	Return			: 0 : NoError, < 0 : Error
 *********************************************************************************/
SINT32	MaWavCnv_Open(SINT32 sdFileID, UINT16 wMode, void* pvExtArgs)
{
	SINT32	sdRet = MASMW_SUCCESS;
	UINT32	dRam;
	UINT32	dSize;
	(void)wMode;
	(void)pvExtArgs;

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

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

	sdRet = MaSndDrv_Create((UINT8)MASMW_SEQTYPE_AUDIO,		/* AudioMode					 */
							(UINT8)MASMW_AUDIO_BASETIME,	/* Timer Setting				 */
							(UINT8)0,						/* Option : ---					 */
							(UINT8)0,						/* ResMode						 */
							1,								/* Num of Stream				 */
							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, (UINT8)gpWavInfo->dMasterVol);
	MaSndDrv_SetCommand(gpWavInfo->sdSeqID, -1, MASNDDRV_CMD_MASTER_VOLUME, (UINT8)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, (UINT8)dFormat, gpWavInfo->DataInfo[sdFileID].dFs,
				 gpWavInfo->DataInfo[sdFileID].pbData, gpWavInfo->DataInfo[sdFileID].dSize);

	return (sdRet);
}


/*********************************************************************************
 *	Function Name	: SINT32	MaWavCnv_Seek(SINT32 sdFileID, UINT32 pos, UINT8 bFlag, void* pvExtArgs)
 *
 *	Description		: Seek() , Not Supported.
 *
 *	Argument		: sdFileID		: File ID
 *					  pos			: Start position(msec)
 *					  flag			: Wait 0:No wait, 1:20[ms] wait
 *					  pvExtArgs		: NULL
 *
 *	Return			: 0 : NoError, < 0 : Error
 *********************************************************************************/
SINT32	MaWavCnv_Seek(SINT32 sdFileID, UINT32 dPos, UINT8 bFlag, void* pvExtArgs)
{
	(void)bFlag;
	(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;
	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);
	}
	
	MaSndDrv_SetCommand(gpWavInfo->sdSeqID, -1, MASNDDRV_CMD_STREAM_SEEK, 0, 0, GetBytePos(sdFileID, gpWavInfo->sdSeekTime));
	MaSndDrv_ControlSequencer(gpWavInfo->sdSeqID, 4);
	gpWavInfo->sdCurrentTime = gpWavInfo->sdSeekTime;

	/* control sequencer */
	MaSndDrv_ControlSequencer(gpWavInfo->sdSeqID, 1);
	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);

	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);
}


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

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

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

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

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

	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_GET_CONTENTSDATA :
		return GetContentsData(sdFileID, (PMASMW_CONTENTSINFO)pvPrm);
	}

	return (MASMW_ERROR);
}

⌨️ 快捷键说明

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