📄 mahvsw.c
字号:
}
/* get state */
sdRet = __MaSound_Control(sdFuncId, sdFileId, MASMW_GET_STATE, NULL, NULL);
if(sdRet < MASMW_SUCCESS) {
return (sdRet);
}
switch(sdRet) {
case MASMW_STATE_PLAYING :
case MASMW_STATE_PAUSE :
/* playing or pause */
__MaSound_Stop(sdFuncId, sdFileId, NULL);
case MASMW_STATE_READY :
case MASMW_STATE_OPENED :
/* opened or ready */
__MaSound_Close(sdFuncId, sdFileId, NULL);
case MASMW_STATE_LOADED :
/* loaded */
__MaSound_Unload(sdFuncId, sdFileId, NULL);
default :
break;
}
gHvswInfo.sdHvFileId = -1;
return (MASMW_SUCCESS);
}
/****************************************************************************
* MaHvsw_CallBack
*
* Function:
* Hook Callback.
* Argument:
* bId ... Event number.
* Return:
* 0 success.
* <0 error code.
*
****************************************************************************/
static SINT32 MaHvsw_CallBack(UINT8 bId, SINT32 (*pfnCallbackFunc)(UINT8))
{
SINT32 sdRet = MASMW_SUCCESS;
if((MAHVSW_MIN_NOTE <= bId) && (bId < MAHVSW_MAX_NOTE)) {
MaHvsw_HvNoteOff();
MaHvsw_HvNoteOn((UINT32)(bId - MAHVSW_MIN_NOTE));
}
else if(bId == MAHVSW_NOTE_OFF) {
MaHvsw_HvNoteOff();
}
else {
if((bId == MASMW_REPEAT) || (bId == MASMW_END_OF_SEQUENCE)) {
MaHvsw_HvNoteOff();
}
if(pfnCallbackFunc) {
sdRet = pfnCallbackFunc(bId);
}
}
return (sdRet);
}
/****************************************************************************
* CallBack_Dummy0/1/2
*
* Function:
* Hook callback.
* Argument:
* bId ... Event number.
* Return:
* 0 success.
* <0 error code.
*
****************************************************************************/
static SINT32 CallBack_Dummy0(UINT8 bId)
{
return (MaHvsw_CallBack(bId, gHvswInfo.sHook[0].pfnCallbackFunc));
}
static SINT32 CallBack_Dummy1(UINT8 bId)
{
return (MaHvsw_CallBack(bId, gHvswInfo.sHook[1].pfnCallbackFunc));
}
static SINT32 CallBack_Dummy2(UINT8 bId)
{
return (MaHvsw_CallBack(bId, gHvswInfo.sHook[2].pfnCallbackFunc));
}
/****************************************************************************
* MaSound_Create
*
* Function:
* Setting the MA Stream Converter and callback function.
* Argument:
* cnv_id ID number of MA Stream Converter
* Return:
* >= 0 function id of registered MA Stream Converter
* < 0 error code
*
****************************************************************************/
SINT32 MaSound_Create
(
UINT8 cnv_id /* stream converter id */
)
{
SINT32 sdRet = MASMW_ERROR; /* result of function */
if ((cnv_id == MASMW_CNVID_HVS) && (gHvswInfo.sdDefaultHvLanguage == MASMW_HVTYPE_NONE)) {
return (MASMW_ERROR_ID);
}
sdRet = __MaSound_Create(cnv_id);
if(sdRet < MASMW_SUCCESS) {
/* Prohibit access when HV is already created. */
if((gHvswInfo.sdHvFuncId >= 0) && (gHvswInfo.sdHvFuncId == cnv_id)) {
return (MASMW_ERROR_HV_CONFLICT);
}
}
return (sdRet);
}
/****************************************************************************
* MaSound_Load
*
* Function:
* Performs loading processing of Stream Converter.
* Arguments:
* func_id function id
* file_ptr pointer to file
* file_size byte size of file
* mode error check mode 0: no check
* 1: check
* 2: check only
* 3: get contents information
* func callback function
* ext_args for future extension
* Return:
* >= 0 success. file id.
* < 0 error code
*
****************************************************************************/
SINT32 MaSound_Load
(
SINT32 func_id, /* function id */
UINT8 * file_ptr, /* pointer to file */
UINT32 file_size, /* size of file */
UINT8 mode, /* error check mode */
SINT32 (*func)(UINT8 id), /* callback function */
void * ext_args /* for future extension */
)
{
SINT32 sdId;
SINT32 sdRet = MASMW_ERROR; /* result of function */
MASNDSEQ_DBGMSG(("MaSound_Load: id=%ld\n", func_id));
/* Prohibit access when HV is already created. */
if(gHvswInfo.sdHvFuncId == func_id) {
return (MASMW_ERROR);
}
/* Check function id */
sdId = IsHookFunc(func_id);
if((sdId >= MASMW_SUCCESS) && (mode < 2)) {
sdRet = __MaSound_Load(func_id, file_ptr, file_size, mode, gpfnCallback[sdId], ext_args);
if(sdRet >= MASMW_SUCCESS) {
gHvswInfo.sHook[sdId].sdFuncId = func_id;
gHvswInfo.sHook[sdId].sdFileId = sdRet;
gHvswInfo.sHook[sdId].pfnCallbackFunc = func;
}
}
else {
sdRet = __MaSound_Load(func_id, file_ptr, file_size, mode, func, ext_args);
}
return (sdRet);
}
/****************************************************************************
* MaSound_Open
*
* Function:
* Performs opening processing of Stream Converter.
* Arguments:
* func_id function id
* file_id file id
* open_mode file open mode
* ext_args for future extension
* Return:
* 0 success
* < 0 error code
*
****************************************************************************/
SINT32 MaSound_Open
(
SINT32 func_id, /* function id */
SINT32 file_id, /* file id */
UINT16 open_mode, /* open mode */
void * ext_args /* for future extension */
)
{
UINT8 bParam;
SINT32 sdTmp;
SINT32 sdHvCh;
SINT32 sdFuncId;
SINT32 sdHvType;
MASMW_HVVOICEPARAM Hvv;
MASMW_HVSCRIPT Hvs;
SINT32 sdRet = MASMW_ERROR; /* result of function */
MASNDSEQ_DBGMSG(("MaSound_Open: id=%ld hd=%ld md=%hd\n", func_id, file_id, open_mode));
/* Prohibit access when HV is already created. */
if(gHvswInfo.sdHvFuncId == func_id) {
return (MASMW_ERROR);
}
sdHvType = gHvswInfo.sdDefaultHvLanguage;
sdRet = __MaSound_Open(func_id, file_id, open_mode, ext_args);
if((IsHookFunc(func_id) >= MASMW_SUCCESS) && (sdRet == MASMW_SUCCESS)) {
/* Initialize */
MaHvsw_Initialize();
/* get HV channel number */
sdHvCh = __MaSound_Control(func_id, file_id, MASMW_GET_HVCHANNEL, NULL, NULL);
if(sdHvCh < MASMW_SUCCESS) {
return (sdRet);
}
/* get HV script */
Hvs.pbBuf = NULL;
Hvs.dSize = 0;
sdTmp = __MaSound_Control(func_id, file_id, MASMW_GET_HVSCRIPT, &Hvs, NULL);
if(sdTmp == MASMW_SUCCESS) {
sdHvType = GetFirstLanguageType(Hvs.pbBuf, Hvs.dSize);
/* set language type */
if ((gHvswInfo.sdDefaultHvLanguage != MASMW_HVTYPE_JAPANESE) &&
(sdHvType == MASMW_HVTYPE_JAPANESE)) {
__MaSound_DeviceControl(MASMW_SET_HVTYPE, (UINT8)sdHvType, 0, 0);
}
}
else {
Hvs.pbBuf = NULL;
Hvs.dSize = 0;
}
/* create HVS */
sdFuncId = __MaSound_Create(MASMW_CNVID_HVS);
if(sdFuncId < MASMW_SUCCESS)
{
if (sdFuncId != MASMW_ERROR_ID) /*--- MASMW_ERROR_ID means No HVS module. ---*/
{
__MaSound_Close(func_id, file_id, NULL);
__MaSound_DeviceControl(MASMW_SET_HVTYPE, (UINT8)gHvswInfo.sdDefaultHvLanguage, 0, 0);
return (MASMW_ERROR_HV_CONFLICT);
}
}
/* set HV channel number */
bParam = (UINT8)sdHvCh;
__MaSound_Control(sdFuncId, 0, MASMW_SET_HVCHANNEL, &bParam, NULL);
/* get HV LED/VIB status */
sdTmp = __MaSound_Control(func_id, file_id, MASMW_GET_HVCHANNELSTATUS, NULL, NULL);
if(sdTmp & 0x00000004) gHvswInfo.sdKeyCon = 1;
/* set HV LED/VIB status */
bParam = (UINT8)(sdTmp & 0x00000003);
__MaSound_Control(sdFuncId, 0, MASMW_SET_HVCHANNELSTATUS, &bParam, NULL);
/* get HV extend voice */
Hvv.bProgNo = 0;
Hvv.pbBuf = NULL;
Hvv.dSize = 0;
sdTmp = __MaSound_Control(func_id, file_id, MASMW_GET_HVVOICE, &Hvv, NULL);
if(sdTmp == MASMW_SUCCESS) {
/* set HV extend voice */
Hvv.bProgNo |= 0x80;
__MaSound_Control(sdFuncId, 0, MASMW_SET_HVVOICE, &Hvv, NULL);
}
/* set HV script */
LoadHvScript(Hvs.pbBuf, Hvs.dSize);
/* remember func & file id */
gHvswInfo.sdFuncId = func_id;
gHvswInfo.sdFileId = file_id;
gHvswInfo.sdHvFuncId = sdFuncId;
}
return (sdRet);
}
/****************************************************************************
* MaSound_Control
*
* Function:
* Performs controlling processing of Stream Conveter.
* Argument:
* func_id function id
* file_id file id
* ctrl_num control number
* prm control parameter
* ext_args for future extension
* Return:
* 0 success
* < 0 error code
*
****************************************************************************/
SINT32 MaSound_Control
(
SINT32 func_id, /* function id */
SINT32 file_id, /* file id */
UINT8 ctrl_num, /* control number */
void * prm, /* parameter */
void * ext_args /* for future extension */
)
{
UINT8 bVolume;
SINT32 sdRet = MASMW_ERROR; /* result of function */
SINT32 sdFuncId = gHvswInfo.sdHvFuncId;
SINT32 sdFileId = gHvswInfo.sdHvFileId;
MASNDSEQ_DBGMSG(("MaSound_Control: id=%ld hd=%ld cn=%d\n", func_id, file_id, ctrl_num));
/* Prohibit access when HV is already created. */
if(sdFuncId == func_id) {
return (MASMW_ERROR);
}
if( (sdFuncId >= 0) &&
(gHvswInfo.sdFuncId == func_id) &&
(gHvswInfo.sdFileId == file_id)) {
if(ctrl_num == MASMW_SET_HVVOLUME) {
/* Argument Check!! */
if(prm == NULL) return (MASMW_ERROR_ARGUMENT);
bVolume = *((UINT8*)prm);
if(bVolume > 127) return (MASMW_ERROR_ARGUMENT);
gHvswInfo.dHvVolume = (UINT32)bVolume;
if(sdFileId >= 0) {
bVolume = (UINT8)MixVolume();
__MaSound_Control(sdFuncId, sdFileId, MASMW_SET_VOLUME, &bVolume, ext_args);
}
return (MASMW_SUCCESS);
}
sdRet = __MaSound_Control(func_id, file_id, ctrl_num, prm, ext_args);
if(sdRet >= MASMW_SUCCESS) {
switch(ctrl_num) {
case MASMW_SET_VOLUME :
gHvswInfo.dVolume = (UINT32)*((UINT8*)prm);
if(sdFileId >= 0) {
bVolume = (UINT8)MixVolume();
__MaSound_Control(sdFuncId, sdFileId, ctrl_num, &bVolume, ext_args);
}
break;
case MASMW_SET_KEYCONTROL :
gHvswInfo.sdKey = (SINT32)*((SINT8*)prm);
if((sdFileId >= 0) && (gHvswInfo.sdKeyCon)) {
__MaSound_Control(sdFuncId, sdFileId, ctrl_num, prm, ext_args);
}
break;
default:
break;
}
}
}
else {
sdRet = __MaSound_Control(func_id, file_id, ctrl_num, prm, ext_args);
}
return (sdRet);
}
/****************************************************************************
* MaSound_Standby
*
* Function:
* Performs standby processing of Stream Converter.
* Argument:
* func_id function id
* file_id file id
* ext_args for future extension
* Return:
* 0 success
* < 0 error code
*
****************************************************************************/
SINT32 MaSound_Standby
(
SINT32 func_id, /* function id */
SINT32 file_id, /* file id */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -