📄 mawavcnv.c
字号:
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 + -