?? mamidcnv.c
字號:
* Return
* none
****************************************************************************/
static void SendPanpot(SINT32 sdTime, UINT32 dCh, UINT32 dPan)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendPanpot[%ld] = %ld\n", sdTime, dCh, dPan));
dPan &= 0x7F;
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_PANPOT;
pMsg->dP1 = dCh;
pMsg->dP2 = dPan;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
} else {
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dPanpot =dPan;
}
}
/****************************************************************************
* SendHold1(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
*
* Desc.
* Send Hold1 message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dVal Hold1 (0..127)
* Return
* none
****************************************************************************/
static void SendHold1(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendHold1[%ld] = %ld\n", sdTime, dCh, dVal));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_HOLD1;
pMsg->dP1 = dCh;
pMsg->dP2 = ((dVal < 64) ? 0 : 1);
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
} else {
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dHold1 = dVal;
}
}
/****************************************************************************
* SendBendRange(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
*
* Desc.
* Send PitchBendRange message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dVal BendRange (0..24)
* Return
* none
****************************************************************************/
static void SendBendRange(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendBendRange[%ld] = %ld\n", sdTime, dCh, dVal));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
if (dVal <= 24)
{
pMsg->dMsgID = MASNDDRV_CMD_BEND_RANGE;
pMsg->dP1 = dCh;
pMsg->dP2 = dVal;
}
else
{
pMsg->dMsgID = MASNDDRV_CMD_NOP;
pMsg->dP1 = 0;
}
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
} else {
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dPreBendRange = dVal;
}
}
/****************************************************************************
* SendFineTune(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
*
* Desc.
* Send FineTune message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dVal Tune (0..0x3FFF)
* Return
* none
****************************************************************************/
static void SendFineTune(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
{
PMIDPACKET pMsg;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendFineTune[%ld] = %ld\n", sdTime, dCh, dVal));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_FINE_TUNE;
pMsg->dP1 = dCh;
pMsg->dP2 = dVal;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
}
}
/****************************************************************************
* SendCoaseTune(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
*
* Desc.
* Send CoaseTune message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dVal Tune (0..0x7F)
* Return
* none
****************************************************************************/
static void SendCoaseTune(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
{
PMIDPACKET pMsg;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendCoaseTune[%ld] = %ld\n", sdTime, dCh, dVal));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_COASE_TUNE;
pMsg->dP1 = dCh;
pMsg->dP2 = dVal;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
}
}
/****************************************************************************
* SendAllSoundOff(SINT32 sdTime, UINT32 dCh)
*
* Desc.
* Send AllSoundOff message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* Return
* none
****************************************************************************/
static void SendAllSoundOff(SINT32 sdTime, UINT32 dCh)
{
PMIDPACKET pMsg;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendAllSoundOff[%ld] \n", sdTime, dCh));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_ALL_SOUND_OFF;
pMsg->dP1 = dCh;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
}
}
/****************************************************************************
* SendAllNoteOff(SINT32 sdTime, UINT32 dCh)
*
* Desc.
* Send AllNoteOff message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* Return
* none
****************************************************************************/
static void SendAllNoteOff(SINT32 sdTime, UINT32 dCh)
{
PMIDPACKET pMsg;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendAllNoteOff[%ld]\n", sdTime, dCh));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_ALL_NOTE_OFF;
pMsg->dP1 = dCh;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
}
}
/****************************************************************************
* SendResetAllCtl(SINT32 sdTime, UINT32 dCh)
*
* Desc.
* Send ResetAllCtl message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* Return
* none
****************************************************************************/
static void SendResetAllCtl(SINT32 sdTime, UINT32 dCh)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendResetAllCtl[%ld] \n", sdTime, dCh));
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dRPN = 0x7F7F;
pCh->dExpression = 127;
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_RESET_ALL_CONTROLLERS;
pMsg->dP1 = dCh;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
SendExpression(0, dCh, pCh->dExpression);
} else {
pCh->dModulation = 0;
pCh->dBendRange = pCh->dPreBendRange;
pCh->dPitchBend = 0x40;
pCh->dHold1 = 0;
}
}
/****************************************************************************
* SendMonoOn(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
*
* Desc.
* Send MonoOn message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dVal Shuld be 0
* Return
* none
****************************************************************************/
static void SendMonoOn(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
(void) dVal;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendMonoOn[%ld] \n", sdTime, dCh));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_MONO_MODE_ON;
pMsg->dP1 = dCh;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
} else {
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dMode = 0;
}
}
/****************************************************************************
* SendPolyOn(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
*
* Desc.
* Send MonoOn message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dVal Shuld be 0
* Return
* none
****************************************************************************/
static void SendPolyOn(SINT32 sdTime, UINT32 dCh, UINT32 dVal)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
(void) dVal;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendPolyOn[%ld] \n", sdTime,dCh));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_POLY_MODE_ON;
pMsg->dP1 = dCh;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
} else {
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dMode = 1;
}
}
/****************************************************************************
* SendControl(SINT32 sdTime, UINT32 dCh, UINT32 dMsg2, UINT32 dMsg3)
*
* Desc.
* Send Control message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dMsg2 Parameter 1
* dMsg3 Parameter 2
* Return
* none
****************************************************************************/
static void SendControl(SINT32 sdTime, UINT32 dCh, UINT32 dMsg2, UINT32 dMsg3)
{
PMIDCHINFO pCh;
switch (dMsg2)
{
case 0x07: /* Channel volume */
SendChVol(sdTime, dCh, dMsg3);
break;
case 0x0B: /* Expression */
SendExpression(sdTime, dCh, dMsg3);
break;
case 0x0A: /* Panpot */
SendPanpot(sdTime, dCh, dMsg3);
break;
case 0x40: /* Hold1 */
SendHold1(sdTime, dCh, dMsg3);
break;
case 0x01: /* Modulation */
SendModDepth(sdTime, dCh, dMsg3);
break;
case 0x00: /* Bank select(MSB) */
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dBank = (pCh->dBank & 0x00FF) | (dMsg3 << 8);
break;
case 0x20: /* Bank select (LSB) */
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dBank = (pCh->dBank & 0xFF00) | dMsg3;
break;
case 0x06: /* Data Entry MSB */
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
switch (pCh->dRPN)
{
case 0: /* BendSens */
SendBendRange(sdTime, dCh, dMsg3);
break;
case 1: /* FineTune */
pCh->dFineTune = (dMsg3 & 0x7f) << 7;
SendFineTune(sdTime, dCh, pCh->dFineTune);
break;
case 2: /* CoaseTune */
pCh->dCoaseTune = dMsg3 & 0x7F;
SendCoaseTune(sdTime, dCh, pCh->dCoaseTune);
}
break;
case 0x26: /* Data Entry LSB */
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
switch (pCh->dRPN)
{
case 1: /* FineTune */
pCh->dFineTune &= 0x3F80;
pCh->dFineTune |= dMsg3 & 0x7f;
SendFineTune(sdTime, dCh, pCh->dFineTune);
}
break;
case 0x62: /* NRPN (LSB) */
case 0x63: /* NRPN (MSB) */
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dRPN |= 0x8000;
break;
case 0x64: /* RPN (LSB) */
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dRPN = (pCh->dRPN & 0x7F00) | dMsg3;
break;
case 0x65: /* RPN (MSB) */
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dRPN = (pCh->dRPN & 0x007F) | (dMsg3 << 8);
break;
case 0x78:
SendAllSoundOff(sdTime, dCh);
break;
case 0x7B:
SendAllNoteOff(sdTime, dCh);
break;
case 0x79:
SendResetAllCtl(sdTime, dCh);
break;
case 0x7e:
SendAllNoteOff(sdTime, dCh);
SendMonoOn(0, dCh, dMsg3);
break;
case 0x7f:
SendAllNoteOff(sdTime, dCh);
SendPolyOn(0, dCh, dMsg3);
break;
default:
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:UnknownControl[%ld, %ld, %ld] \n", sdTime, dCh, dMsg2, dMsg3));
}
}
/****************************************************************************
* SendPitchBend(SINT32 sdTime, UINT32 dCh, UINT32 dLl, UINT32 dHh)
*
* Desc.
* Send PitchBend message
* Param
* sdTime Delta time
* dCh #Channel(0..15)
* dLl Lower 7bit of PitchBend (0..127)
* bHh Upper 7bit of PitchBend (0..127)
* Return
* none
****************************************************************************/
static void SendPitchBend(SINT32 sdTime, UINT32 dCh, UINT32 dLl, UINT32 dHh)
{
PMIDPACKET pMsg;
PMIDCHINFO pCh;
MASMFCNV_DBGMSG(("MaMidCnv : %8ld:SendPitchBend[%d] = %02lX:%02lX\n", sdTime, dCh, dHh, dLl));
if (sdTime >= 0)
{
pMsg = &gpMidInfo->MsgBuffer[gpMidInfo->dHoldMsgs++];
pMsg->sdDeltaTime = sdTime;
pMsg->dMsgID = MASNDDRV_CMD_PITCH_BEND;
pMsg->dP1 = dCh;
pMsg->dP2 = (dHh << 7) + dLl;
gpMidInfo->sdLastMsgTime += sdTime << (SMF_TIMEBASE_SHIFT + 10);
} else {
pCh = &gpMidInfo->DataInfo[1].ChInfo[dCh];
pCh->dBendRange = pCh->dPreBendRange;
pCh->dPitchBend = dHh;
}
}
/****************************************************************************
* SendGmOn(SINT32 sdTime)
*
* Desc.
* Send GmOn message
* Param
* sdTime Delta time
* Return
* none
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -