📄 melody_api.c
字号:
result = MI_Melody_PostStop(func_id, file_id, MI_StopAndPost);
#if 0 /* Robert.Chen removed, 2004-04-09 */
if(melodyCtrlBlk.vbrSta.ctrlSrc != MI_VBR_SRC_FORCED)
{
MI_Melody_HpAmpCtrl(0);
gbMelLP = 1;
}
else if(melodyCtrlBlk.vbrSta.frcCtrl != MI_VBR_FORCED_ON)
{
MI_Melody_HpAmpCtrl(0);
gbMelLP = 1;
}
#else
MI_Melody_HpAmpCtrl(0, MI_PWRCTRL_MUSIC);
#endif
//gbMelLP = 1; /* removed 2004-04-08 */
MI_Melody_RstCtrlBlk();
if(result != MI_MELODY_OK)
{
MELODYTRACE_MSG(("MelRet:stop play failed,result=%d!", result));
return MI_MELODY_ERROR;
}
/* end change */
return MI_MELODY_OK;
}
/******************************************************************************
*
* Function:
* MI_PlayMusic_Stop()
*
* Description:
* Pause the currently playing music, the current playing status will be
* returned which will be use as the music resume parameter
*
* Input:
* staRet pointer to a T_MELODY_STATE_RET struct which will valid when
* function retuen MI_MELODY_OK.
*
* Output:
* MI_MELODY_OK
* MI_MELODY_NOT_INIT
* MI_MELODY_ERROR
* MI_MELODY_PARA_ERR
*
*****************************************************************************/
T_MELODY_RET MI_PlayMusic_Pause(T_MELODY_STATE_RET * const staRet)
{
SINT32 result;
SINT32 func_id;
SINT32 file_id;
MELODYTRACE_MSG(("MelFunc:MI_PlayMusic_Pause()!"));
if(!melodyCtrlBlk.initialized)
return MI_MELODY_NOT_INIT;
if(staRet == NULL)
return MI_MELODY_PARA_ERR;
/* no music play running */
if(melodyCtrlBlk.musicID == MI_MELODY_MUSICID_INVALID)
return MI_MELODY_OK;
func_id = melodyCtrlBlk.funcID[melodyCtrlBlk.fileType];
file_id = melodyCtrlBlk.fileID;
if(melodyCtrlBlk.fileType != MASMW_CNVID_AUD || melodyCtrlBlk.fileType != MASMW_CNVID_MID)
{
/* pause not supported by Audio and realtime MIDI converter */
staRet->curPos = 0;
}
else
{
result = MaSound_Pause(func_id, file_id, NULL);
if(result != MASMW_SUCCESS)
{
MELODYTRACE_MSG(("MelRet:pause failed,result=%d!", result));
MI_Melody_ErrHdr(func_id, file_id);
return MI_MELODY_ERROR;
}
result = MaSound_Control(func_id, file_id, MASMW_GET_POSITION, NULL, NULL);
if(result < 0)
staRet->curPos = 0;
else
staRet->curPos = result;
}
staRet->remainCnt = melodyCtrlBlk.remainCnt;
staRet->musicID = melodyCtrlBlk.musicID;
staRet->curVolume = melodyCtrlBlk.curVolume;
MI_Melody_PostStop(func_id, file_id, MI_StopAndPost);
MI_Melody_HpAmpCtrl(0, MI_PWRCTRL_MUSIC);
MI_Melody_RstCtrlBlk();
return MI_MELODY_OK;
}
/******************************************************************************
*
* Function:
* MI_PlayMusic_Resume()
*
* Description:
* Resume a previously posted music specified by playing state returned
* when the music was paused.
*
* Input:
* staRet pointer to a T_MELODY_STATE_RET struct represents the state when
* the music is paused
*
* Output:
* MI_MELODY_OK
* MI_MELODY_NOT_INIT
* MI_MELODY_ERROR
* MI_MELODY_PARA_ERR
*
*****************************************************************************/
T_MELODY_RET MI_PlayMusic_Resume(const T_MELODY_STATE_RET *staRet)
{
SINT32 result;
SINT32 func_id;
SINT32 file_id;
MELODYTRACE_MSG(("MelFunc:MI_PlayMusic_Resume(),mID=%d.", staRet->musicID));
if(staRet == NULL)
return MI_MELODY_PARA_ERR;
if(!melodyCtrlBlk.initialized)
return(MI_MELODY_NOT_INIT);
result = MI_PlayPrepare(staRet->musicID, staRet->remainCnt);
if(result != MI_MELODY_OK)
{
MELODYTRACE_MSG(("MelRet:play prepare failed,result=%d!", result));
return result;
}
func_id = melodyCtrlBlk.funcID[melodyCtrlBlk.fileType];
file_id = melodyCtrlBlk.fileID;
AI_MaskIT(0x02);
result = MaSound_Seek(func_id, file_id, staRet->curPos, 0, NULL);
if(result != MASMW_SUCCESS)
{
MELODYTRACE_MSG(("MelRet:seek pos err,result=%d!", result));
MI_Melody_ErrHdr(func_id, file_id);
AI_UnmaskIT(0x02);
return MI_MELODY_ERROR;
}
result = MaSound_Start(func_id, file_id, staRet->remainCnt, NULL);
if(result != MASMW_SUCCESS)
{
MELODYTRACE_MSG(("MelRet:resume play err,result=%d!", result));
MI_Melody_ErrHdr(func_id, file_id);
AI_UnmaskIT(0x02);
return MI_MELODY_ERROR;
}
MaSound_DeviceControl(MASMW_SP_VOLUME, spkLev2val[melodyCtrlBlk.curVolume], 0, 0);
#if (MIDI_STEREO == 1)
MaSound_DeviceControl(MASMW_HP_VOLUME, 0, spkLev2val[melodyCtrlBlk.curVolume], spkLev2val[melodyCtrlBlk.curVolume]);
#endif
MaSound_DeviceControl(MASMW_EQ_VOLUME, 31, 0, 0);
AI_UnmaskIT(0x02);
MELODYTRACE_MSG(("MelSta:music resume success!"));
return MI_MELODY_OK;
}
/******************************************************************************
*
* Function:
* MI_Volume_Set()
*
* Description:
* Set speaker volume with a specified level (0~5)
*
* Input:
* spkVol speaker value level, from 0 to 5
*
* Output:
* MI_MELODY_OK
* MI_MELODY_ERROR
* MI_MELODY_NOT_INIT
*
* History:
* 2004-02-07 Robert.Chen Add volume control to headphone
*
*****************************************************************************/
T_MELODY_RET MI_Volume_Set(UINT8 spkVol)
{
SINT32 result1, result2;
MELODYTRACE_MSG(("MelFunc:MI_Volume_Set(),vol=%d.", spkVol));
if(!melodyCtrlBlk.initialized)
return MI_MELODY_NOT_INIT;
if(spkVol > MI_MELODY_VOLUME_MAX)
spkVol = MI_MELODY_VOLUME_MAX;
AI_MaskIT(0x02);
if(melodyCtrlBlk.musicID != MI_MELODY_MUSICID_INVALID)
{
result1 = MaSound_DeviceControl(MASMW_SP_VOLUME, spkLev2val[spkVol], 0, 0);
#if (MIDI_STEREO == 1)
result2 = MaSound_DeviceControl(MASMW_HP_VOLUME, 0, spkLev2val[spkVol], spkLev2val[spkVol]);
#else
result2 = MASMW_SUCCESS;
#endif
if(result1 != MASMW_SUCCESS || result2 != MASMW_SUCCESS)
{
MELODYTRACE_MSG(("MelRet:Set spk or hp volume err,r1=%d,r2=%d!", result1, result2));
AI_UnmaskIT(0x02);
return MI_MELODY_ERROR;
}
}
melodyCtrlBlk.curVolume = spkVol;
AI_UnmaskIT(0x02);
return MI_MELODY_OK;
}
/******************************************************************************
*
* Function:
* MI_Volume_Get()
*
* Description:
* Get current speaker volume level (0~5)
*
* Input:
* spkVol
*
* Output:
* MI_MELODY_OK
* MI_MELODY_ERROR
* MI_MELODY_NOT_INIT
* MI_MELODY_PARA_ERR
*
*****************************************************************************/
T_MELODY_RET MI_Volume_Get(UINT8* spkVol)
{
MELODYTRACE_MSG(("MelFunc:MI_Volume_Get()!"));
if(spkVol == NULL)
return MI_MELODY_PARA_ERR;
if(!melodyCtrlBlk.initialized)
return MI_MELODY_NOT_INIT;
*spkVol = melodyCtrlBlk.curVolume;
return MI_MELODY_OK;
}
/******************************************************************************
*
* Function:
* MI_Volume_Up()
*
* Description:
* increase current speaker volume one level (0~5)
*
* Input:
* curVol if not equal NULL, return new speaker volume when function
* return with MI_MELODY_OK
*
* Output:
* MI_MELODY_OK
* MI_MELODY_ERROR
* MI_MELODY_NOT_INIT
*
*****************************************************************************/
T_MELODY_RET MI_Volume_Up(UINT8* curVol)
{
SINT32 result = MI_MELODY_OK;
MELODYTRACE_MSG(("MelFunc:MI_Volume_Up()!"));
if(melodyCtrlBlk.curVolume < MI_MELODY_VOLUME_MAX)
result = MI_Volume_Set(melodyCtrlBlk.curVolume+1);
else
return MI_MELODY_OK;
if(result == MI_MELODY_OK && curVol != NULL)
*curVol = melodyCtrlBlk.curVolume;
return result;
}
/******************************************************************************
*
* Function:
* MI_Volume_Down()
*
* Description:
* decrease current speaker volume one level (0~5)
*
* Input:
* curVol if not equal NULL, return new speaker volume when function
* return with MI_MELODY_OK
*
* Output:
* MI_MELODY_OK
* MI_MELODY_ERROR
* MI_MELODY_NOT_INIT
*
*****************************************************************************/
T_MELODY_RET MI_Volume_Down(UINT8* curVol)
{
SINT32 result = MI_MELODY_OK;
MELODYTRACE_MSG(("MelFunc:MI_Volume_Down()!"));
if(melodyCtrlBlk.curVolume > MI_MELODY_VOLUME_MIN)
result = MI_Volume_Set(melodyCtrlBlk.curVolume-1);
else
return MI_MELODY_OK;
if(result == MI_MELODY_OK && curVol != NULL)
*curVol = melodyCtrlBlk.curVolume;
return result;
}
/******************************************************************************
*
* Function:
* MI_Vibrator_SetMode()
*
* Description:
* Set the vibrator control source and config blinking frequency
*
* Input:
* ctrlSrc vibrator control source
* MI_VBR_SRC_OFF
* MI_VBR_SRC_SEQSYNC
* MI_VBR_SRC_FORCED
* blkFreq vibrator blinking frequency
* MI_VBR_BLK_OFF no blink
* MI_VBR_BLK_XXXHZ blinking at a frequency when MI_VBR_SRC_FORCED
*
* Output:
* MI_MELODY_OK
* MI_MELODY_ERROR
* MI_MELODY_NOT_INIT
*
*****************************************************************************/
T_MELODY_RET MI_Vibrator_SetMode(UINT8 ctrlSrc, UINT8 blkFreq)
{
SINT32 result;
MELODYTRACE_MSG(("MelFunc:MI_Vibrator_SetMode(src=%d,freq=%d)",ctrlSrc, blkFreq));
if(!melodyCtrlBlk.initialized)
return MI_MELODY_NOT_INIT;
#ifdef MELODY_POWERSAVE
result = MI_Melody_PwrRelease();
if(result != MI_MELODY_OK)
return MI_MELODY_ERROR;
#endif
result = MaSound_DeviceControl(MASMW_MTR_MASTER, ctrlSrc, 0, 0);
if(result != MASMW_SUCCESS)
return MI_MELODY_ERROR;
else
melodyCtrlBlk.vbrSta.ctrlSrc = ctrlSrc;
result = MaSound_DeviceControl(MASMW_MTR_BLINK, blkFreq, 0, 0);
if(result != MASMW_SUCCESS)
return MI_MELODY_ERROR;
else
melodyCtrlBlk.vbrSta.blink = blkFreq;
return MI_MELODY_OK;
}
/******************************************************************************
*
* Function:
* MI_Vibrator_GetMode()
*
* Description:
* Get the vibrator config mode and current state (on/off)
*
* Input:
* vbrSet pointer to a struct contains current vibrator setting and state
*
* Output:
* MI_MELODY_OK
* MI_MELODY_NOT_INIT
* MI_MELODY_PARA_ERR
*
*****************************************************************************/
T_MELODY_RET MI_Vibrator_GetMode(T_MELODY_VBR_STARET *const vbrSet)
{
MELODYTRACE_MSG(("MelFunc:MI_Vibrator_GetMode()!"));
if(vbrSet == NULL)
return MI_MELODY_PARA_ERR;
if(!melodyCtrlBlk.initialized)
return MI_MELODY_NOT_INIT;
vbrSet->ctrlSrc = melodyCtrlBlk.vbrSta.ctrlSrc;
vbrSet->blink = melodyCtrlBlk.vbrSta.blink;
vbrSet->frcCtrl = melodyCtrlBlk.vbrSta.frcCtrl;
return MI_MELODY_OK;
}
/******************************************************************************
*
* Function:
* MI_Vibrator_SetMode()
*
* Description:
* Set the vibrator control source and config blinking frequency
*
* Input:
* ctrlSrc vibrator control source
* MI_VBR_SRC_OFF
* MI_VBR_SRC_SEQSYNC
* MI_VBR_SRC_FORCED
* blkFreq vibrator blinking frequency
* MI_VBR_BLK_OFF no blink
* MI_VBR_BLK_XXXHZ blinking at a frequency when MI_VBR_SRC_FORCED
*
* Output:
* MI_MELODY_OK
* MI_MELODY_ERROR
* MI_MELODY_NOT_INIT
*
*****************************************************************************/
T_MELODY_RET MI_Vibrator_ForcedCtrl(UINT8 ctrl)
{
SINT32 result;
MELODYTRACE_MSG(("MelFunc:MI_Vibrator_ForcedCtrl(ctrl=%d).", ctrl));
if(!melodyCtrlBlk.initialized)
return MI_MELODY_NOT_INIT;
#ifdef MELODY_POWERSAVE
result = MI_Melody_PwrRelease();
if(result != MI_MELODY_OK)
return MI_MELODY_ERROR;
#endif
AI_MaskIT(0x02);
#if 0 /* Robert.Chen removed, 2004-04-08 */
if(ctrl == MI_VBR_FORCED_ON && melodyCtrlBlk.musicID == MI_MELODY_MUSICID_INVALID)
{
MI_Melody_HpAmpCtrl(1);
gbMelLP = 0;
}
#else
if(ctrl == MI_VBR_FORCED_ON)
MI_Melody_HpAmpCtrl(1, MI_PWRCTRL_VBR);
#endif
result = MaSound_DeviceControl(MASMW_MTR_DIRECT, ctrl, 0, 0);
#if 0 /* Robert.Chen removed, 2004-04-08 */
if(ctrl == MI_VBR_FORCED_OFF && melodyCtrlBlk.musicID == MI_MELODY_MUSICID_INVALID)
{
MI_Melody_HpAmpCtrl(0);
gbMelLP = 1;
}
#else
if(ctrl == MI_VBR_FORCED_OFF)
MI_Melody_HpAmpCtrl(0, MI_PWRCTRL_VBR);
#endif
if(result != MASMW_SUCCESS)
{
AI_UnmaskIT(0x02);
return MI_MELODY_ERROR;
}
else
melodyCtrlBlk.vbrSta.frcCtrl = ctrl;
AI_UnmaskIT(0x02);
#ifdef MELODY_POWERSAVE
if(ctrl != MI_VBR_FORCED_ON)
NU_Control_Timer(&melodyCtrlBlk.pwrSaveTmr, NU_ENABLE_TIMER);
#endif
return MI_MELODY_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -