亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? marmdcnv.c

?? 是一個手機功能的模擬程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/****************************************************************************
 *
 *		Copyright (C) 2002-2003	YAMAHA CORPORATION. All rights reserved.
 *
 *		Module		: marmdcnv.c
 *
 *		Description	: Realtime MIDI/GML Stream Converter Module.
 *
 *		Version		: 1.0.3 	2003.06.26
 *
 ****************************************************************************/


#include "marmdcnv.h"

/*--------------------------------------------------------------------------*/
/*   Defines                                                                */
/*--------------------------------------------------------------------------*/
#define	RMD_MAX_GAIN		76				/* - 9[dB]                  */
											/* - 6[dB] : 90             */
											/* - 9[dB] : 76             */
											/* -12[dB] : 64             */
											/* -18[dB] : 45             */

#define RMD_INTERVAL_CB		(17)

#define ENC_8BIT			(0)
#define ENC_7BIT			(1)

#define	MAX_NUM_OF_WAVES	(32)

#define MODE_DRUM			(0x00)			/* GMX 			*/

/*--------------------------------------------------------------------------*/
/*   Types                                                                  */
/*--------------------------------------------------------------------------*/
typedef struct _MASMW_MIDIMSG
{
	UINT8*	pbMsg;						/* pointer to MIDI message */
	UINT32	dSize;						/* size of MIDI message */
} MASMW_MIDIMSG, *PMASMW_MIDIMSG;


typedef	struct _MASMW_GETCTL
{
	UINT8	bControl;					/* contorl number */
	UINT8 	bCh;						/* channel number */
} MASMW_GETCTL, *PMASMW_GETCTL;


typedef	struct _tagRmdGlobals
{
 	SINT32		(*pfnCallbackFunc)(UINT8 bId);	/*                       */

	SINT32		sdSeqID;						/* Sequence ID           */
	SINT32		sdFileID;						/* File ID               */
	UINT32		dOpend;							/* 0:Closed, 1:Opend     */
	UINT32		dNumOfLoaded;					/*                       */
	UINT32		dIntervalTime;					/* 0 or 20[ms]           */

	UINT32		dMaxGain;						/* MaxGain (0..127)      */
	UINT32		dMasterVolume;					/* MasterVolume (0..127) */

	UINT32		dRamBase;						/*                       */
	UINT32		dRamOffset;						/*                       */
	UINT32		dRamSize;						/*                       */

	UINT32		dBankTable[16];					/* 0..0x7F7F             */
	UINT32		dRPNTable[16];					/* 0..0xFF7F             */
	UINT32		dChVolumeTable[16];				/* 0..127                */
	UINT32		dExpressionTable[16];			/* 0..127                */
	UINT32		dFineTune[16];					/* 0..0x3FFF			 */
	UINT32		dWtAdrTable[MAX_NUM_OF_WAVES];	/*                       */
} RMDGLOBAL, *PRMDGLOBAL;

/*--------------------------------------------------------------------------*/
/*   Consts                                                                 */
/*--------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------*/
/*   Globals                                                                 */
/*---------------------------------------------------------------------------*/
static RMDGLOBAL	gRmdInfo;
static PRMDGLOBAL	gpRmdInfo;

/*---------------------------------------------------------------------------*/
/*   Functions (internal use only)                                           */
/*---------------------------------------------------------------------------*/

/****************************************************************************
 *	SendMasterVolume(UINT32 dVol)
 *
 *	Description
 *		Send SetMasterVolume message
 *	Param
 *		dVol	Master volume (0..127)
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	SendMasterVolume(UINT32 dVol)
{
	if (gpRmdInfo->sdSeqID > 0)
	{
		MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_MASTER_VOLUME, dVol, 0, 0);
	}
	return (MASMW_SUCCESS);
}


/****************************************************************************
 *	ErrorFunction(UINT32 dCh, UINT32 dPara1, UINT32 dPara2)
 *
 *	Description
 *		Invalid messages
 *
 *	Param
 *		dCh		MIDI channel (0..15)
 *		dPara1	Undefined
 *		dPara2	Undefined
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	ErrorFunction(UINT32 dCh, UINT32 dPara1, UINT32 dPara2)
{
	(void)dCh;
	(void)dPara1;
	(void)dPara2;

	MARMDCNV_DBGMSG(("ErrorFunction\n"));

	return (MASMW_ERROR_ARGUMENT);
}


/****************************************************************************
 *	NotSupported(UINT32 dCh, UINT32 dPara1, UINT32 dPara2)
 *
 *	Description
 *		Unsupported messages
 *	Param
 *		dCh		MIDI channel (0..15)
 *		dPara1	Undefined
 *		dPara2	Undefined
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	NotSupported(UINT32 dCh, UINT32 dPara1, UINT32 dPara2)
{
	(void)dCh;
	(void)dPara1;
	(void)dPara2;

	MARMDCNV_DBGMSG(("NotSupported\n"));

	return (MASMW_SUCCESS);
}


/****************************************************************************
 *	SendNoteOff(UINT32 dCh, UNIT32 dKey, UINT32 dVel)
 *
 *	Description
 *		Send NoteOff message
 *	Param
 *		dCh			...	#Channel(0..15)
 *		dKey		...	#Key (0..127)
 *		dVel		...	Velocity (0..127)
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	SendNoteOff(UINT32 dCh, UINT32 dKey, UINT32 dVel)
{
	(void)dVel;

	MARMDCNV_DBGMSG(("SendNoteOff[%ld, %ld] \n", dCh, dKey));

	return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_NOTE_OFF, dCh, dKey, 0));
}


/****************************************************************************
 *	SendNoteOn(UINT32 dCh, UINT32 dKey, UINT32 dVel)
 *
 *	Description
 *		Send NoteOn message
 *	Param
 *		dCh			...	#Channel(0..15)
 *		dKey		...	#Key (0..127)
 *		dVel		...	Velocity (0..127)
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	SendNoteOn(UINT32 dCh, UINT32 dKey, UINT32 dVel)
{
	if (dVel == 0) return(SendNoteOff(dCh, dKey, dVel));

	MARMDCNV_DBGMSG(("SendNoteOn[%ld, %ld, %ld]\n", dCh, dKey, dVel));

	return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_NOTE_ON, dCh, dKey, dVel));
}


/****************************************************************************
 *	SendProgram(UINT32 dCh, UNIT32 dProg, UINT32 dPara2)
 *
 *	Description
 *		Send Program message
 *	Param
 *		dCh			...	#Channel(0..15)
 *		dProg		...	#Program(0..127)
 *		dPara2
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	SendProgram(UINT32 dCh, UINT32 dProg, UINT32 dPara2)
{
	UINT8	bBk, bPg;
	UINT32	dBb;
	UINT8	bPp;

	static const UINT8	bMBank[128] = 
	{
		1, 2, 3, 4, 5, 6, 7, 8, 9, 10,0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
	};
	(void)dPara2;
	
	MARMDCNV_DBGMSG(("SendProgram[%ld] = %ld\n", dCh, dProg));

	bPp = (UINT8)(dProg & 0x7f);

	dBb = gpRmdInfo->dBankTable[dCh];

	switch (dBb)
	{
	case 0x7900:	/* Melody */
		bBk = 0;
		bPg = bPp;
		break;

	case 0x7800:	/* Drum */
		bBk = 128;
		bPg = 0;
		break;

	default:		/* Unknown : default GM */
		switch (dBb >> 8)
		{
		case 0x79:	/* Default Melody */
			bBk = 0;
			bPg = bPp;
			break;

		case 0x7C:	/* Ex Melody */
			bBk = (UINT8)(bMBank[dBb & 0x7F]);
			bPg = bPp;
			break;

		case 0x7D:	/* Ex Drum */
			bBk = (UINT8)(128 + bMBank[bPp]);
			bPg = 0;
			break;
		
		default:
			if (dCh == 9)
			{
				bBk = 128;
				bPg = 0;
			} else {
				bBk = 0;
				bPg = bPp;
			}
		}
	}
	return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_PROGRAM_CHANGE, dCh, (UINT32)bBk, (UINT32)bPg));
}

/****************************************************************************
 *	SendModDepth(UINT32 dCh, UINT32 dMod)
 *
 *	Description
 *		Send SetModulation message
 *	Param
 *		dCh			...	#Channel(0..15)
 *		dMod		...	Modulation(0..127)
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	SendModDepth(UINT32 dCh, UINT32 dMod)
{
	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
	};

	MARMDCNV_DBGMSG(("SendModDepth[%ld] = %ld\n", dCh, dMod));

	return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_MODULATION_DEPTH, dCh, (UINT32)bModTable[dMod], 0));
}


/****************************************************************************
 *	SendChVol(UINT32 dCh, UINT32 dVol)
 *
 *	Description
 *		Send ChannelVolume message
 *	Param
 *		dCh			...	#Channel(0..15)
 *		dVol		...	Volume(0..127)
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	SendChVol(UINT32 dCh, UINT32 dVol)
{
	MARMDCNV_DBGMSG(("SendChVol[%ld] =  %ld\n", dCh, dVol));

	gpRmdInfo->dChVolumeTable[dCh] = dVol;

	return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_CHANNEL_VOLUME, dCh, dVol, 0));
}


/****************************************************************************
 *	SendExpression(UINT32 dCh, UINT32 dVol)
 *
 *	Description
 *		Send Expression message
 *	Param
 *		dCh			...	#Channel(0..15)
 *		dVol		...	Volume(0..127)
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	SendExpression(UINT32 dCh, UINT32 dVol)
{
	UINT32	dMix;
	
	MARMDCNV_DBGMSG(("SendExpression[%ld] =  %ld\n", dCh, dVol));

	gpRmdInfo->dExpressionTable[dCh] = dVol;
	
	dMix = MaSndDrv_Mix40LogVol(dVol, gpRmdInfo->dMasterVolume);
	return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_EXPRESSION, dCh, dMix, 0));
}


/****************************************************************************
 *	SendPanpot(UINT32 dCh, UINT32 dPan)
 *
 *	Description
 *		Send Panpot message
 *	Param
 *		dCh			...	#Channel(0..15)
 *		bPan		...	Panpot(0..127)
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	SendPanpot(UINT32 dCh, UINT32 dPan)
{
	MARMDCNV_DBGMSG(("SendPanpot[%ld] = %ld\n", dCh, dPan));

	return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_PANPOT, dCh, dPan, 0));
}


/****************************************************************************
 *	SendHold1(UINT32 dCh, UINT32 dVal)
 *
 *	Description
 *		Send Hold1 message
 *	Param
 *		dCh			...	#Channel(0..15)
 *		dVal		...	Hold1(0..127)
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	SendHold1(UINT32 dCh, UINT32 dVal)
{
	MARMDCNV_DBGMSG(("SendHold1[%ld] = %ld\n", dCh, dVal));

	return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_HOLD1, dCh, (UINT32)((dVal < 64) ? 0 : 1), 0));
}


/****************************************************************************
 *	DataEntryMSB(UINT32 dCh, UINT32 dVal)
 *
 *	Description
 *		Send RPN message
 *	Param
 *		dCh			...	#Channel(0..15)
 *		dVal		...	data(0..127)
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	DataEntryMSB(UINT32 dCh, UINT32 dVal)
{
	MARMDCNV_DBGMSG(("DataEntryMSB[%ld] = %ld\n", dCh, dVal));

	dVal &= 0x7f;
	switch (gpRmdInfo->dRPNTable[dCh])
	{
	case 0:	/* BendSens */
		return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_BEND_RANGE, dCh, dVal, 0));

	case 1:	/* FineTune */
		gpRmdInfo->dFineTune[dCh] = dVal << 7;
		return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_FINE_TUNE, dCh, gpRmdInfo->dFineTune[dCh], 0));
		break;

	case 2:	/* CoaseTune */
		return (MaSndDrv_SetCommand(gpRmdInfo->sdSeqID, -1, MASNDDRV_CMD_COASE_TUNE, dCh, dVal, 0));
		break;
	}
	return (MASMW_SUCCESS);
}


/****************************************************************************
 *	DataEntryLSB(UINT32 dCh, UINT32 dVal)
 *
 *	Description
 *		Send RPN message
 *	Param
 *		dCh			...	#Channel(0..15)
 *		dVal		...	data(0..127)
 *	Return
 *		0 : NoError, < 0 : Error
 ****************************************************************************/
static SINT32	DataEntryLSB(UINT32 dCh, UINT32 dVal)
{
	MARMDCNV_DBGMSG(("DataEntryLSB[%ld] = %ld\n", dCh, dVal));

	switch (gpRmdInfo->dRPNTable[dCh])
	{
	case 1:	/* FineTune */
		gpRmdInfo->dFineTune[dCh] &= 0x3F80;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产麻豆精品| 91精品国产美女浴室洗澡无遮挡| 久久国产欧美日韩精品| 午夜伦理一区二区| 另类综合日韩欧美亚洲| 精品午夜久久福利影院| 国产美女视频91| 成人国产在线观看| 色综合久久久久网| 欧美美女bb生活片| 精品999在线播放| 国产欧美一区二区精品仙草咪| 国产性色一区二区| 国产精品欧美一级免费| 亚洲精品ww久久久久久p站 | 26uuu另类欧美亚洲曰本| 久久亚洲一级片| 国产精品不卡在线观看| 午夜精品久久久久久久久久久| 蜜桃av一区二区在线观看| 国产麻豆视频精品| 91免费视频网址| 日韩三级高清在线| 国产精品情趣视频| 日韩二区三区四区| 99在线精品免费| 日韩一区二区三区在线视频| 亚洲国产精品传媒在线观看| 亚洲一区在线视频| 久久成人久久爱| 色屁屁一区二区| 日韩欧美黄色影院| 亚洲自拍偷拍av| 粉嫩13p一区二区三区| 欧美在线|欧美| 国产亚洲精品资源在线26u| 亚洲国产精品综合小说图片区| 精品一区二区国语对白| 在线观看一区二区精品视频| 久久久久久麻豆| 日韩精品电影在线观看| 99国产欧美另类久久久精品| 日韩免费观看2025年上映的电影| 自拍偷拍欧美激情| 国产精品一区二区在线观看网站 | 精品久久人人做人人爰| 亚洲男女毛片无遮挡| 国产在线精品不卡| 在线成人av网站| 一区二区在线看| 成人av动漫网站| 欧美一级艳片视频免费观看| 曰韩精品一区二区| 成人污污视频在线观看| 久久综合狠狠综合| 加勒比av一区二区| 日韩一区二区视频| 日本欧美一区二区| 欧美日韩视频在线观看一区二区三区 | 亚洲精品水蜜桃| 成人高清在线视频| 日本一区二区三区高清不卡| 国产一区二区剧情av在线| 91精品视频网| 爽好久久久欧美精品| 精品视频色一区| 亚洲成a人片在线不卡一二三区| 91色视频在线| 日韩码欧中文字| 91视频com| 亚洲狠狠爱一区二区三区| 91麻豆免费看| 亚洲制服欧美中文字幕中文字幕| 色哟哟一区二区| 午夜精品久久久久久久蜜桃app| 精品视频在线看| 日本不卡免费在线视频| 欧美一区二区视频网站| 蜜桃久久精品一区二区| 精品国产伦一区二区三区观看方式| 久久99国产精品久久99果冻传媒| 日韩一区二区影院| 国产精品一区二区三区99| 欧美极品另类videosde| 91丨九色porny丨蝌蚪| 亚洲一区二区三区影院| 4438x亚洲最大成人网| 国产又黄又大久久| 国产精品久久国产精麻豆99网站 | 天堂一区二区在线| 欧美一二三区在线观看| 国产99久久久久| 一区二区三区毛片| 日韩午夜电影在线观看| 国产成人自拍高清视频在线免费播放| 亚洲欧洲精品天堂一级| 欧美在线不卡视频| 国产一区二区三区av电影 | 丁香婷婷综合网| 一区二区三区在线观看欧美 | 国产精品久久久久久久第一福利| 色欧美乱欧美15图片| 日本免费新一区视频| 欧美国产一区在线| 欧美日本在线播放| 风间由美一区二区三区在线观看| 亚洲一区二区三区四区五区中文 | 激情文学综合丁香| 亚洲免费在线看| 日韩欧美国产不卡| 91麻豆6部合集magnet| 久久精品国产77777蜜臀| 亚洲欧美在线视频观看| 欧美r级在线观看| 在线观看视频91| 国产一区二区在线观看视频| 亚洲尤物在线视频观看| 国产午夜一区二区三区| 欧美日韩激情一区二区三区| 国产91露脸合集magnet| 日本在线观看不卡视频| 一级做a爱片久久| 国产欧美一区二区精品性色超碰| 91麻豆精品91久久久久久清纯| www.欧美日韩| 国产经典欧美精品| 日本不卡一二三区黄网| 亚洲综合色区另类av| 国产精品久久久久婷婷| 26uuu久久天堂性欧美| 欧美精品欧美精品系列| 欧美亚洲禁片免费| gogo大胆日本视频一区| 国产一区999| 国产真实乱偷精品视频免| 亚洲.国产.中文慕字在线| 国产精品久久久久久久久免费桃花 | 激情综合色播激情啊| 同产精品九九九| 亚洲国产成人va在线观看天堂| 中文字幕日韩一区| 国产精品美女久久久久av爽李琼| 久久免费看少妇高潮| 精品国产91乱码一区二区三区| 日韩亚洲欧美在线| 日韩一区二区在线观看视频 | 欧美国产一区二区在线观看| 久久久三级国产网站| 日韩三级视频在线观看| 精品入口麻豆88视频| 国产福利91精品一区| 久久久久高清精品| 欧美久久久久久蜜桃| 色域天天综合网| 91久久香蕉国产日韩欧美9色| 99久久99久久久精品齐齐| 成人性视频免费网站| 成人福利视频在线| 成人avav影音| 91国产福利在线| 欧美人与禽zozo性伦| 欧美一区二区三区视频在线观看| 日韩欧美国产精品一区| 久久精品亚洲一区二区三区浴池| 国产精品免费av| 一区二区视频在线看| 日本视频一区二区三区| 国产一区二区三区精品视频| 国产精品白丝jk白祙喷水网站| 国产大片一区二区| 91麻豆自制传媒国产之光| 欧美肥胖老妇做爰| 久久久久久97三级| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 一区二区三区中文字幕在线观看| 肉肉av福利一精品导航| 国产精品伊人色| 91电影在线观看| 日韩久久免费av| 亚洲天堂精品在线观看| 亚洲v日本v欧美v久久精品| 国产精品一区二区三区99| 在线观看精品一区| 久久众筹精品私拍模特| 夜夜夜精品看看| 国产综合久久久久久久久久久久| 99国产精品一区| 欧美一区二区精品在线| 国产欧美中文在线| 五月天视频一区| 成人毛片老司机大片| 91麻豆精品国产91久久久使用方法 | 91久久精品一区二区| www欧美成人18+| 一区2区3区在线看| 成人av在线资源网站| 日韩欧美中文一区| 午夜伊人狠狠久久| 91一区二区在线观看| 久久精品人人做|