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 + -
显示快捷键?