?? mamidcnv.c
字號:
{
pbVoiceParam = (UINT8*)&gbDrumVoiceTable[j][2];
dDrumKey = (UINT32)gbDrumVoiceTable[j][1];
dAdr = gpMidInfo->dRamBase + gpMidInfo->dRamOffset;
MaDevDrv_SendDirectRamData(dAdr, 0, pbVoiceParam, 30);
MaSndDrv_SetVoice(gpMidInfo->sdSeqID, 0x80, i, 1, dDrumKey, dAdr);
gpMidInfo->dRamOffset += 30;
}
}
}
}
}
/****************************************************************************
* ErrorFunction(SINT32 sdTime, UINT32 dCh, UINT32 dPara1, UINT32 dPara2)
*
* Desc.
* Error function
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dPara1 Undefined
* dPara2 Undefined
* Return
* none
****************************************************************************/
static void ErrorFunction(SINT32 sdTime, UINT32 dCh, UINT32 dPara1, UINT32 dPara2)
{
(void)sdTime;
(void)dCh;
(void)dPara1;
(void)dPara2;
MASMFCNV_DBGMSG(("MaMidCnv : ErrorFunction\n"));
}
/****************************************************************************
* NotSupported(SINT32 sdTime, UINT32 dCh, UINT32 dPara1, UINT32 dPara2)
*
* Desc.
* Error function
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dPara1 Undefined
* dPara2 Undefined
* Return
* none
****************************************************************************/
static void NotSupported(SINT32 sdTime, UINT32 dCh, UINT32 dPara1, UINT32 dPara2)
{
(void)sdTime;
(void)dCh;
(void)dPara1;
(void)dPara2;
MASMFCNV_DBGMSG(("MaMidCnv : NotSupported\n"));
}
/****************************************************************************
* SendLedSync(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
*
* Desc.
* Send LedSync message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dVal 0:OFF, 1:SYNC_ON
* Return
* none
****************************************************************************/
static void SendLedSync(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
{
PMIDPACKET pMsg;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendLedSync[%d] = %8ld\n", sdTime, dCh, dVal));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_SET_LED_SYNC_CH;
pMsg->dP1 = dCh;
pMsg->dP2 = dVal;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
}
}
/****************************************************************************
* SendVibSync(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
*
* Desc.
* Send MotorSync message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dVal 0:OFF, 1:SYNC_ON
* Return
* none
****************************************************************************/
static void SendVibSync(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
{
PMIDPACKET pMsg;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendVibSync[%d] = %8ld\n", sdTime, dCh, dVal));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_SET_MOTOR_SYNC_CH;
pMsg->dP1 = dCh;
pMsg->dP2 = dVal;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
}
}
/****************************************************************************
* SendMasterVolume(SINT32 sdTime, UINT32 dVol)
*
* Desc.
* Send MasterVolume message
* Param
* sdTime Delta time
* dVol Master volume (0..127)
* Return
* none
****************************************************************************/
static void SendMasterVolume(SINT32 sdTime, UINT32 dVol)
{
PMIDPACKET pMsg;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendMasterVolume[%ld]\n", sdTime, dVol));
if (sdTime >= 0)
{
if (gpMidInfo->dHoldMsgs < MAX_SMF_MESSAGES)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_MASTER_VOLUME;
pMsg->dP1 = dVol;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
}
}
}
/****************************************************************************
* SendUserEvent(SINT32 sdTime, UINT32 dID)
*
* Desc.
* Send USER_EVENT message
* Param
* sdTime Delta time
* dID #UserEvent(0..127)
* Return
* none
****************************************************************************/
static void SendUserEvent(SINT32 sdTime, UINT32 dID)
{
PMIDPACKET pMsg;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendUserEvent[%ld]\n", sdTime, dID));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_USER_EVENT;
pMsg->dP1 = dID;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
}
}
/****************************************************************************
* SendNoteOff(SINT32 sdTime, UINT32 dCh, UINT32 dKey, UINT32 dVel)
*
* Desc.
* Send NoteOff message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dKey #Key (0..127)
* dVel Velocity (0..127)
* Return
* none
****************************************************************************/
static void SendNoteOff(SINT32 sdTime, UINT32 dCh, UINT32 dKey, UINT32 dVel)
{
PMIDPACKET pMsg;
(void)dVel;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendNoteOff[%ld, %ld, %ld]\n", sdTime, dCh, dKey, dVel));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_NOTE_OFF;
pMsg->dP1 = dCh;
pMsg->dP2 = dKey;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
}
}
/****************************************************************************
* SendNoteOn(SINT32 sdTime, UINT32 dCh, UINT32 dKey, UINT32 dVel)
*
* Desc.
* Send NoteOn message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dKey #Key (0..127)
* dVel Velocity (0..127)
* Return
* none
****************************************************************************/
static void SendNoteOn(SINT32 sdTime, UINT32 dCh, UINT32 dKey, UINT32 dVel)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendNoteOn[%ld, %ld, %ld]\n", sdTime, dCh, dKey, dVel));
if (sdTime >= 0)
{
if (dVel > 0)
{
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
if (pCh->dMipMute == 0) /* MIP support */
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_NOTE_ON;
pMsg->dP1 = dCh;
pMsg->dP2 = dKey;
pMsg->dP3 = dVel;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
if ((dKey == gpMidInfo->dSyncNoteKey) && (dCh == gpMidInfo->dSyncNoteCh))
SendUserEvent(0, MASMW_SET_EVENTNOTE);
}
else
{
if ((dKey == gpMidInfo->dSyncNoteKey) && (dCh == gpMidInfo->dSyncNoteCh))
SendUserEvent(sdTime, MASMW_SET_EVENTNOTE);
}
}
else
{
SendNoteOff(sdTime, dCh, dKey, dVel);
}
}
}
/****************************************************************************
* SendProgram(SINT32 sdTime, UINT32 dCh, UINT32 dProg, UINT32 dPara2)
*
* Desc.
* Send ProgramChange message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dProg #Program (0..127)
* dPara2 Undefined
* Return
* none
****************************************************************************/
static void SendProgram(SINT32 sdTime, UINT32 dCh, UINT32 dProg, UINT32 dPara2)
{
UINT32 dBk, dPg;
UINT32 dBb;
UINT32 dPp;
PMIDPACKET pMsg;
PMIDCHINFO pCh;
UINT32 dVibChange;
(void)dPara2;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendProgram[%ld] = %ld\n", sdTime, dCh, dProg));
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dProg = dProg;
dBb = pCh->dBank;
pCh->dCurrBank = dBb;
dVibChange = 0;
if ((dBb == 0x7906) && (dProg == 0x7C))
{
if (pCh->dVibSync == 0)
{
gpMidInfo->dVibNote = 1;
dVibChange = 1;
pCh->dVibSync = 1;
}
}
else
{
if (gpMidInfo->dVibNote == 1)
{
if (pCh->dVibSync == 1)
{
dVibChange = 1;
pCh->dVibSync = 0;
}
}
}
if (sdTime >= 0)
{
dPp = dProg;
switch (dBb)
{
case 0x7900: /* Melody */
dBk = 0;
dPg = dPp;
break;
case 0x7800: /* Drum */
dBk = 128;
dPg = 0;
break;
case 0x7906: /* Ring Vibrator (SP-MIDI) */
dBk = 6;
dPg = 0x7C;
break;
default: /* Unkonwn : Default GM */
if ((dBb >> 8) == 0x79)
{
/* Melody */
dBk = 0;
dPg = dPp;
}
else
{
/* default */
if (dCh == 9)
{
dBk = 128;
dPg = 0;
}
else
{
dBk = 0;
dPg = dPp;
}
}
}
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_PROGRAM_CHANGE;
pMsg->dP1 = dCh;
pMsg->dP2 = dBk;
pMsg->dP3 = dPg;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
if (dVibChange == 1) SendVibSync(0, dCh, pCh->dVibSync);
}
}
/****************************************************************************
* SendModDepth(SINT32 sdTime, UINT32 dCh, UINT32 dMod)
*
* Desc.
* Send ModDepth message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dMod Modulation(0..127)
* Return
* none
****************************************************************************/
static void SendModDepth(SINT32 sdTime, UINT32 dCh, UINT32 dMod)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
static const UINT8 bModTable[128] =
{
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
};
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendModDepth[%ld, %ld]\n", sdTime, dCh, dMod));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_MODULATION_DEPTH;
pMsg->dP1 = dCh;
pMsg->dP2 = (UINT32)bModTable[dMod & 0x7F];
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
} else {
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dModulation = dMod;
}
}
/****************************************************************************
* SendChVol(SINT32 sdTime, UINT32 dCh, UINT32 dVol)
*
* Desc.
* Send ChVol message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dVol ChVolume (0..127)
* Return
* none
****************************************************************************/
static void SendChVol(SINT32 sdTime, UINT32 dCh, UINT32 dVol)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendChVol[%ld] = %ld\n", sdTime, dCh, dVol));
dVol &= 0x7F;
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_CHANNEL_VOLUME;
pMsg->dP1 = dCh;
pMsg->dP2 = dVol;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
} else {
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dVolume = dVol;
}
}
/****************************************************************************
* SendExpression(SINT32 sdTime, UINT32 dCh, UINT32 dVol)
*
* Desc.
* Send Expression message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dVol Expression(0..127)
* Return
* none
****************************************************************************/
static void SendExpression(SINT32 sdTime, UINT32 dCh, UINT32 dVol)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendExpression[%ld] = %ld, %ld\n", sdTime, dCh, dVol, gpMidInfo->dMasterVolume));
dVol &= 0x7F;
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dExpression = dVol;
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_EXPRESSION;
pMsg->dP1 = dCh;
pMsg->dP2 = MaSndDrv_Mix40LogVol(dVol, gpMidInfo->dMasterVolume);
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
}
}
/****************************************************************************
* SendPanpot(SINT32 sdTime, UINT32 dCh, UINT32 dPan)
*
* Desc.
* Send Expression message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dPan Panpot (0..127)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -