?? marmdcnv.c
字號(hào):
gpRmdInfo->dFineTune[dCh] |= (dVal & 0x7f);
return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_FINE_TUNE, dCh, gpRmdInfo->dFineTune[dCh], 0));
}
return (MASMW_SUCCESS);
}
/****************************************************************************
* SendAllSoundOff(UINT32 dCh)
*
* Description
* Send AllSoundOff message
* Param
* dCh ... #Channel(0..15)
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
static SINT32 SendAllSoundOff(UINT32 dCh)
{
MARMDCNV_DBGMSG(("SendAllSoundOff[%ld] \n", dCh));
return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_ALL_SOUND_OFF, dCh, 0, 0));
}
/****************************************************************************
* SendAllNoteOff(UINT32 dCh)
*
* Description
* Send AllNoteOff message
* Param
* dCh ... #Channel(0..15)
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
static SINT32 SendAllNoteOff(UINT32 dCh)
{
MARMDCNV_DBGMSG(("SendAllNoteOff[%ld] \n", dCh));
return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_ALL_NOTE_OFF, dCh, 0, 0));
}
/****************************************************************************
* SendResetAllCtl(UINT32 dCh)
*
* Description
* Send ResetAllControllers message
* Param
* dCh ... #Channel(0..15)
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
static SINT32 SendResetAllCtl(UINT32 dCh)
{
MARMDCNV_DBGMSG(("SendResetAllCtl[%ld] \n", dCh));
gpRmdInfo->dRPNTable[dCh] = 0x7F7F;
gpRmdInfo->dExpressionTable[dCh] = 127;
return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_RESET_ALL_CONTROLLERS, dCh, 0, 0));
}
/****************************************************************************
* SendMonoOn(UINT32 dCh, UINT32 dVal)
*
* Description
* Send MonoOn message
* Param
* dCh ... #Channel(0..15)
* dVal ...
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
static SINT32 SendMonoOn(UINT32 dCh, UINT32 dVal)
{
MARMDCNV_DBGMSG(("SendMonoOn[%ld] \n", dCh));
if (dVal != 1) return (MASMW_SUCCESS);
MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_ALL_NOTE_OFF, dCh, 0, 0);
return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_MONO_MODE_ON, dCh, 0, 0));
}
/****************************************************************************
* SendPolyOn(UINT32 dCh, UINT32 dVal)
*
* Description
* Send PolyOn message
* Param
* dCh ... #Channel(0..15)
* dVal ...
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
static SINT32 SendPolyOn(UINT32 dCh, UINT32 dVal)
{
MARMDCNV_DBGMSG(("SendPolyOn[%ld] \n", dCh));
if (dVal != 0) return (MASMW_SUCCESS);
MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_ALL_NOTE_OFF, dCh, 0, 0);
return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_POLY_MODE_ON, dCh, 0, 0));
}
/****************************************************************************
* SendControl(UINT32 dCh, UNIT32 dMsg2, UINT32 dMsg3)
*
* Description
* Control messages
* Param
* dCh ... #Channel(0..15)
* dMsg2 ... Param-1
* dMsg3 ... Param-2
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
static SINT32 SendControl(UINT32 dCh, UINT32 dMsg2, UINT32 dMsg3)
{
MARMDCNV_DBGMSG(("SendControl[%ld, %ld, %ld] \n", dCh, dMsg2, dMsg3));
switch (dMsg2)
{
case 0x00: /* Bank select(MSB) */
gpRmdInfo->dBankTable[dCh] = (gpRmdInfo->dBankTable[dCh] & 0x00FF) | ((UINT32)dMsg3 << 8);
break;
case 0x20: /* Bank select (LSB) */
gpRmdInfo->dBankTable[dCh] = (gpRmdInfo->dBankTable[dCh] & 0xFF00) | ((UINT32)dMsg3);
break;
case 0x01:
return (SendModDepth(dCh, dMsg3));
case 0x06:
return (DataEntryMSB(dCh, dMsg3));
case 0x07:
return (SendChVol(dCh, dMsg3));
case 0x0A:
return (SendPanpot(dCh, dMsg3));
case 0x0B:
return (SendExpression(dCh, dMsg3));
case 0x26:
return (DataEntryLSB(dCh, dMsg3));
case 0x40:
return (SendHold1(dCh, dMsg3));
case 0x62: /* NRPN (LSB) */
case 0x63: /* NRPN (MSB) */
gpRmdInfo->dRPNTable[dCh] |= 0x8000;
break;
case 0x64: /* RPN (LSB) */
gpRmdInfo->dRPNTable[dCh] = (gpRmdInfo->dRPNTable[dCh] & 0x7F00) | ((UINT32)dMsg3);
break;
case 0x65: /* RPN (MSB) */
gpRmdInfo->dRPNTable[dCh] = (gpRmdInfo->dRPNTable[dCh] & 0x007F) | ((UINT32)dMsg3 << 8);
break;
case 0x78:
return (SendAllSoundOff(dCh));
case 0x7B:
return (SendAllNoteOff(dCh));
case 0x79:
return (SendResetAllCtl(dCh));
case 0x7e:
return (SendMonoOn(dCh,dMsg3));
case 0x7f:
return (SendPolyOn(dCh, dMsg3));
default:
return (MASMW_SUCCESS);
}
return (MASMW_SUCCESS);
}
/****************************************************************************
* SendPitchBend(UINT32 dCh, UNIT32 dLl, UINT32 dHh)
*
* Description
* Send PitchBend message
* Param
* dCh ... #Channel(0..15)
* dLl ... Lower 7bit of PitchBend (0..127)
* dHh ... Upper 7bit of PitchBend (0..127)
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
static SINT32 SendPitchBend(UINT32 dCh, UINT32 dLl, UINT32 dHh)
{
MARMDCNV_DBGMSG(("SendPitchBend[%ld] = %ld\n", dCh, dHh));
return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_PITCH_BEND, dCh, ((dHh << 7) | (dLl)), 0));
}
/****************************************************************************
* SendGmOn(void)
*
* Description
* Send GM_ON message
* Param
* none
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
static SINT32 SendGmOn(void)
{
SINT32 sdRet;
UINT32 dCh;
MARMDCNV_DBGMSG(("SendGmOn\n"));
gpRmdInfo->dMaxGain = RMD_MAX_GAIN;
gpRmdInfo->dMasterVolume = 127;
for (dCh = 0; dCh < 16; dCh++)
{
SendAllSoundOff(dCh);
gpRmdInfo->dRPNTable[dCh] = 0x7f7f;
gpRmdInfo->dBankTable[dCh] = (dCh == 9) ? 0x7800 : 0x7900;
gpRmdInfo->dChVolumeTable[dCh] = 100;
gpRmdInfo->dExpressionTable[dCh] = 127;
}
sdRet = MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_SYSTEM_ON, 0, 0, 0);
if (sdRet < 0) return (sdRet);
sdRet = SendMasterVolume(gpRmdInfo->dMaxGain);
return (sdRet);
}
/****************************************************************************
* Decode7Enc(UINT8* pbSrc, UINT32 dSrcSize, UINT8* pbDst, UINT32 dDstSize)
*
* Desc.
* 7bit->8bit decoder
* Param
* pbSrc Pointer to the source
* pbSrcSize Size of the source[byte]
* pbDst Pointer to the destination
* pbDstSize Size of the destination[byte]
* Return
* size of decoded data
****************************************************************************/
static UINT32 Decode7Enc(UINT8* pbSrc, UINT32 dSrcSize, UINT8* pbDst, UINT32 dDstSize)
{
UINT32 i, j;
UINT8* pbEnd;
UINT8 bTag;
i = 0;
pbEnd = pbSrc + dSrcSize;
while (i < dDstSize)
{
bTag = *(pbSrc++);
if (pbSrc >= pbEnd) break;
for (j = 0; j < 7; j++)
{
bTag <<= 1;
pbDst[i++] = (UINT8)((bTag & 0x80) | *(pbSrc++));
if (pbSrc >= pbEnd) break;
if (i >= dDstSize) return (i);
}
}
return (i);
}
/*---------------------------------------------------------------------------*/
/* Functions */
/*---------------------------------------------------------------------------*/
/****************************************************************************
* MaRmdCnv_Initialize(void)
*
* Description
* Initialize RealtimeMIDI converter
* Param
* none
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
SINT32 MaRmdCnv_Initialize(void)
{
gpRmdInfo = &gRmdInfo;
gpRmdInfo->sdSeqID = -1; /* Sequence ID */
gpRmdInfo->sdFileID = -1; /* File ID */
gpRmdInfo->dOpend = 0; /* 0:disabed */
gpRmdInfo->dNumOfLoaded = 0; /* */
return (MASMW_SUCCESS);
}
/****************************************************************************
* MaRmdCnv_End(void)
*
* Description
* Ending of RealtimeMIDI converter
* Param
* none
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
SINT32 MaRmdCnv_End(void)
{
return (MASMW_SUCCESS);
}
/****************************************************************************
* MaRmdCnv_Convert(void)
*
* Description
* No effect
* Param
* none
* Return
* 1 : Continue
****************************************************************************/
static SINT32 MaRmdCnv_Convert(void)
{
if ((gpRmdInfo->dIntervalTime > 0) && (gpRmdInfo->pfnCallbackFunc != NULL))
{
gpRmdInfo->pfnCallbackFunc(RMD_INTERVAL_CB);
}
return (1);
}
/****************************************************************************
* MaRmdCnv_Load(UINT8* pbFile, UINT32 dFileSize,
* UINT32 dMode, SINT32 (*pfnFunc)(UINT8 bID), void* pvExtArgs)
*
* Description
* Load MIDI settings
* Param
* pbFile ... pointer to the data
* dFileSize ... size fo the data
* dMode ... error check (0:No, 1:Yes, 2:Check)
* pfnFunc ... pointer of rhe callback function
* pvExtArgs ... NULL
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
SINT32 MaRmdCnv_Load(UINT8* pbFile, UINT32 dFileSize, UINT32 dMode, SINT32 (*pfnFunc)(UINT8 bID), void* pvExtArgs)
{
(void)pbFile;
(void)dFileSize;
(void)pvExtArgs;
MARMDCNV_DBGMSG(("MaRmdCnv_Load\n"));
if (dMode > 1) return (MASMW_SUCCESS);
if (gpRmdInfo->dNumOfLoaded > 0) return (MASMW_ERROR);
gpRmdInfo->dNumOfLoaded++;
gpRmdInfo->pfnCallbackFunc = pfnFunc;
gpRmdInfo->sdFileID = gpRmdInfo->dNumOfLoaded;
gpRmdInfo->dIntervalTime = 0;
return ((SINT32)gpRmdInfo->sdFileID);
}
/****************************************************************************
* MaRmdCnv_Unload(SINT32 sdFileID, void* pvExtArgs)
*
* Description
* Unload MIDI settings
* Param
* sdFileID ... file ID
* pvExtArgs ... NULL
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
SINT32 MaRmdCnv_Unload(SINT32 sdFileID, void* pvExtArgs)
{
(void)pvExtArgs;
MARMDCNV_DBGMSG(("MaRmdCnv_Unload[%ld] \n", sdFileID));
if ((sdFileID < 0) || (sdFileID != (SINT32)gpRmdInfo->sdFileID))
{
return (MASMW_ERROR);
}
gpRmdInfo->dNumOfLoaded = 0;
gpRmdInfo->sdFileID = -1;
return (MASMW_SUCCESS);
}
/****************************************************************************
* MaRmdCnv_Open(SINT32 sdFileID, void* pvExtArgs)
*
* Description
* Enable MIDI
* Param
* sdFileID ... file ID
* pvExtArgs ... NULL
* Return
* 0 : NoError, < 0 : Error
****************************************************************************/
SINT32 MaRmdCnv_Open(SINT32 sdFileID, void* pvExtArgs)
{
UINT32 i;
UINT32 dRam;
UINT32 dSize;
(void)pvExtArgs;
MARMDCNV_DBGMSG(("MaRmdCnv_Open[%ld] \n", sdFileID));
if ((sdFileID < 0) || (sdFileID != gpRmdInfo->sdFileID))
{
return (MASMW_ERROR);
}
gpRmdInfo->sdSeqID = MaSndDrv_Create(
MASMW_SEQTYPE_DIRECT,
gpRmdInfo->dIntervalTime, /* Interval Timer */
4L, /* 16+16 Mode */
7L, /* 4-OP,GML,MA5VOL */
0L, /* No Streams */
255L, /* No AL */
MaRmdCnv_Convert, /* */
&dRam, /* */
&dSize); /* */
MARMDCNV_DBGMSG(("MaRmdCnv_Open/SeqID=%ld \n", gpRmdInfo->sdSeqID));
if (gpRmdInfo->sdSeqID < 0) return (gpRmdInfo->sdSeqID);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -