⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 masnddrv.h

📁 是一个手机功能的模拟程序
💻 H
字号:
/****************************************************************************
 *																			*
 *		Copyright (C) 2001-2003	YAMAHA CORPORATION. All rights reserved.	*
 *																			*
 *		Module		: masnddrv.h											*
 *																			*
 *		Description	: MA Sound Driver										*
 *																			*
 * 		Version		: 1.3.15.3	2003.03.17									*
 *																			*
 ****************************************************************************/


#ifndef __MASNDDRV_H__
#define __MASNDDRV_H__

#include "mamachdep.h"
#include "madebug.h"
#include "maresmgr.h"
#include "masndseq.h"
#include "madevdrv.h"

#define MASNDDRV_MAX_ID						(1)

#define MASMW_MAX_REG_SEQ					(2)
#define	MA_MAX_REG_VOICE					(128)
#define	MA_MAX_REG_STREAM					(32)
#define MASMW_MAX_SLOT						(32+8+2)
#define MA_MAX_RAM_BANK						(16)

#define MASNDDRV_CMD_NOTE_ON				(0)
#define MASNDDRV_CMD_NOTE_ON_MA2			(1)
#define MASNDDRV_CMD_NOTE_ON_MA2EX			(2)
#define MASNDDRV_CMD_NOTE_OFF				(3)
#define MASNDDRV_CMD_NOTE_OFF_MA2			(4)
#define MASNDDRV_CMD_NOTE_OFF_MA2EX			(5)
#define MASNDDRV_CMD_PROGRAM_CHANGE			(6)
#define MASNDDRV_CMD_MODULATION_DEPTH		(7)
#define MASNDDRV_CMD_CHANNEL_VOLUME			(8)
#define MASNDDRV_CMD_PANPOT					(9)
#define MASNDDRV_CMD_EXPRESSION				(10)
#define MASNDDRV_CMD_HOLD1					(11)
#define MASNDDRV_CMD_ALL_SOUND_OFF			(12)
#define MASNDDRV_CMD_RESET_ALL_CONTROLLERS	(13)
#define MASNDDRV_CMD_ALL_NOTE_OFF			(14)
#define MASNDDRV_CMD_MONO_MODE_ON			(15)
#define MASNDDRV_CMD_POLY_MODE_ON			(16)
#define MASNDDRV_CMD_PITCH_BEND				(17)
#define MASNDDRV_CMD_BEND_RANGE				(18)
#define MASNDDRV_CMD_STREAM_ON				(19)
#define MASNDDRV_CMD_STREAM_OFF				(20)
#define MASNDDRV_CMD_STREAM_SLAVE			(21)
#define MASNDDRV_CMD_STREAM_PANPOT			(22)
#define MASNDDRV_CMD_MASTER_VOLUME			(23)
#define MASNDDRV_CMD_SYSTEM_ON				(24)
#define MASNDDRV_CMD_LED_ON					(25)
#define MASNDDRV_CMD_LED_OFF				(26)
#define MASNDDRV_CMD_MOTOR_ON				(27)
#define MASNDDRV_CMD_MOTOR_OFF				(28)
#define MASNDDRV_CMD_USER_EVENT				(29)
#define MASNDDRV_CMD_NOP					(30)
#define MASNDDRV_CMD_STREAM_SEEK			(31)

#define MASMW_MAX_COMMAND					MASNDDRV_CMD_STREAM_SEEK

#define MASMW_NUM_CHANNEL					(16)		/* number of channel */
#define MASMW_MAX_CHANNEL					(15)		/* maximum value of channle */

#define MASMW_MAX_SEQTYPE					(2)			/* maximum value of sequence type */

#define MASMW_MAX_CNVMODE					(0x3F)		/* maximum value of cnv_mode */
#define MASMW_MAX_RESMODE					(16)		/* maximum value of res_mode */

#define MASMW_NUM_STREAM					(2)			/* number of stream audio */
#define MASMW_MAX_STREAM					(1)			/* maximum value of stream audio */

#define MASMW_NUM_VOICEINFO					(2)			/* number of voice information */

#define MASMW_SEQTYPE_DELAYED				(0)
#define MASMW_SEQTYPE_DIRECT				(1)
#define MASMW_SEQTYPE_AUDIO					(2)

#define MASMW_MIN_DLY_BASETIME				(1)
#define MASMW_MAX_DLY_BASETIME				(10)
#define MASMW_DIRECT_BASETIME				(20)
#define MASMW_AUDIO_BASETIME				(0)

#define MASMW_MAX_NOPTYPE					(1)			/* maximum value of nop type */
#define MASMW_MAX_USEREVENT					(127)		/* maximum value of user event */
#define MASMW_MAX_KEY						(127)		/* maximum value of key */
#define MASMW_MAX_VELOCITY					(127)		/* maximum value of velocity */
#define MASMW_MAX_BANK						(255)		/* maximum value of bank number */
#define MASMW_MAX_PROGRAM					(127)		/* maximum value of program number */
#define MASMW_MAX_DEPTH						(4)			/* maximum value of modulation depth */
#define MASMW_MAX_VOLUME					(127)		/* maximum value of volume */
#define MASMW_MAX_PAN						(127)		/* maximum value of panpot */
#define MASMW_MAX_HOLD1						(1)			/* maximum value of hold1 */
#define MASMW_MAX_BEND						(0x3FFF)	/* maximum value of pitch bend */
#define MASMW_MAX_BENDRANGE					(24)		/* maximum value of bend range */
#define MASMW_MAX_FORMAT					(3)			/* maximum value of format */
#define MASMW_MAX_STREAMPAN					(255)		/* maximum value of stream panpot */
#define MASMW_MIN_STREAMFS					(4000)		/* minimum value of stream frequency */
#define MASMW_MAX_STREAMFS					(48000)		/* maximum value of stream frequency */
#define MASMW_MIN_RAMADRS					(0x4000)	/* minimum value of ram address */
#define MASMW_MAX_RAMADRS					(0x5FFF)	/* maximum value of ram address */

#define MASMW_STMADPCM_ENDPOINT				(0x07C0)	/* steram audio ADPCM end point */
#define MASMW_STMPCM_ENDPOINT				(0x03DF)	/* stream audio PCM end point */

#define MASMW_MASK_CHANNEL					(0x0F)
#define MASMW_MASK_COMMAND					(0x1F)
#define MASMW_MASK_BANK						(0xFF)
#define MASMW_MASK_PROGRAM					(0x7F)
#define MASMW_MASK_VOLUME					(0x7F)
#define MASMW_MASK_XVB						(0xF8)
#define MASMW_MASK_SUS						(0xEF)
#define MASMW_MASK_BEND						(0x3FFF)
#define MASMW_MASK_DEPTH					(0x07)

#define MASMW_MAX_DB						(192)

#define MA_FS 								(48000)

#define MA_MIN_GML1_DRUM					(35)		/* minimum number of GM Level1 drum */
#define MA_MAX_GML1_DRUM					(81)		/* maximum number of GM Level1 drum */

/* macro definitions */

#define MAKE_TIMER_PART(seq_id, num, delta_time)							\
{																			\
	if ( delta_time >= 0 )													\
	{																		\
		packet_buf[seq_id][num++] = (UINT8)( 0x80 );						\
	}																		\
}

#define MAKE_ADDRESS_PART(seq_id, num, reg_index)							\
{																			\
	packet_buf[seq_id][num++] = (UINT8)(  reg_index       & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)( (reg_index >> 7) | 0x80 );			\
}

#define MAKE_KEY_ON(seq_id, num, voice_id, vo_volume, pitch, ch)			\
{																			\
	packet_buf[seq_id][num++] = (UINT8)( (voice_id >> 7)  & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)(  voice_id        & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)(  vo_volume       & 0x7C );			\
	packet_buf[seq_id][num++] = (UINT8)( (pitch >> 7)     & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)(  pitch           & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)( (0x40 + ch)      | 0x80 );			\
}

#define MAKE_KEY_OFF(seq_id, num, ch)										\
{																			\
	packet_buf[seq_id][num++] = (UINT8)(  ch              | 0x80 );			\
}

#define MAKE_VEL_PITCH(seq_id, num, vo_volume, pitch)						\
{																			\
	packet_buf[seq_id][num++] = (UINT8)(  vo_volume       & 0x7C );			\
	packet_buf[seq_id][num++] = (UINT8)( (pitch >> 7)     & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)(  pitch           | 0x80 );			\
}

#define MAKE_PITCH(seq_id, num, pitch)										\
{																			\
	packet_buf[seq_id][num++] = (UINT8)( (pitch >> 7)     & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)(  pitch           | 0x80 );			\
}

#define MAKE_MUTE(seq_id, num, ch)											\
{																			\
	packet_buf[seq_id][num++] = (UINT8)( (0x20 + ch)  	  | 0x80 );			\
}

#define MAKE_RST(seq_id, num, ch)											\
{																			\
	packet_buf[seq_id][num++] = (UINT8)( (0x10 + ch)  	  | 0x80 );			\
}

#define MAKE_RST_MUTE(seq_id, num, ch)										\
{																			\
	packet_buf[seq_id][num++] = (UINT8)( (0x30 + ch)  	  | 0x80 );			\
}

#define MAKE_CHANNEL_VOLUME(seq_id, num, volume)							\
{																			\
	packet_buf[seq_id][num++] = (UINT8)( (volume & 0x7C)  | 0x80 );			\
}

#define MAKE_PANPOT(seq_id, num, pan)										\
{																			\
	packet_buf[seq_id][num++] = (UINT8)( (pan & 0x7C)     | 0x80 );			\
}

#define MAKE_SFX(seq_id, num, sfx)											\
{																			\
	packet_buf[seq_id][num++] = (UINT8)(  sfx             | 0x80 );			\
}

#define MAKE_STREAM_ON(seq_id, num, ram_adrs, vo_volume, pitch, ch)			\
{																			\
	packet_buf[seq_id][num++] = (UINT8)( (ram_adrs >> 7)  & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)(  ram_adrs        & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)(  vo_volume       & 0x7C );			\
	packet_buf[seq_id][num++] = (UINT8)( (pitch >> 7)     & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)(  pitch           & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)(  ch              | 0x80 );			\
}

#define MAKE_SOFTINT_RAM(seq_id, num, ram_val)								\
{																			\
	packet_buf[seq_id][num++] = (UINT8)(  ram_val         | 0x80 );			\
}

#define MAKE_SOFTINT(seq_id, num, int_val)									\
{																			\
	packet_buf[seq_id][num++] = (UINT8)(  int_val         | 0x80 );			\
}

#define MAKE_LED(seq_id, num, led)											\
{																			\
	packet_buf[seq_id][num++] = (UINT8)(  led             | 0x80 );			\
}

#define MAKE_MOTOR(seq_id, num, mtr)										\
{																			\
	packet_buf[seq_id][num++] = (UINT8)(  mtr             | 0x80 );			\
}

#define MAKE_PITCH_BEND(seq_id, num, bend)									\
{																			\
	packet_buf[seq_id][num++] = (UINT8)( (bend >> 7)      & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)(  bend            | 0x80 );			\
}

#define MAKE_NOP(seq_id, num, reg_index)									\
{																			\
	packet_buf[seq_id][num++] = (UINT8)(  reg_index       & 0x7F );			\
	packet_buf[seq_id][num++] = (UINT8)( (reg_index >> 7) | 0x80 );			\
	packet_buf[seq_id][num++] = (UINT8)(  0x00            | 0x80 );			\
}

/* struct definitions */

typedef struct _MACHINFO
{
	UINT8	bank_no;					/* bank number */
	UINT8	prog_no;					/* program number */
	UINT8	poly;						/* poly/mono */
	UINT8	sfx;						/* sfx */
	UINT8	volume;						/* volume */
	UINT8	expression;					/* expression */
	UINT8	bend_range;					/* bend range */
	UINT8	key_control;				/* key control */
	UINT8	note_on;					/* note on */
	UINT8	slot_no;					/* slot number */
} MACHINFO;

typedef struct _MASLOTINFO
{
	UINT8	ch;							/* channel number */
	UINT32	key;						/* key number */
	UINT32	time;						/* time */
	UINT32	tick;						/* tick */
} MASLOTINFO;

typedef struct _MAVOICEINFO
{
	UINT16	bank_prog;					/* bank, program number */
	UINT8	synth;						/* synth type */
	UINT16	key;						/* key number */
	UINT16	ram_adrs;					/* ram address */
} MAVOICEINFO, * PMAVOICEINFO;

typedef struct _MAVINFO
{
	UINT8	synth;						/* synth type */
	UINT16	key;						/* key number */
	UINT16	address;					/* address */
} MAVINFO, * PMAVINFO;

typedef struct _MASTREAMINFO
{
	UINT8	format;						/* format */
	UINT8	pan;						/* pan */
	UINT32	frequency;					/* frequency */
} MASTREAMINFO, * PMASTREAMINFO;

typedef struct _MALEDINFO
{
	UINT8	ctrl;						/* control */
	UINT8	dsw;						/* direct sw */
	UINT8	blink;						/* blink */
	UINT8	freq;						/* frequency */
} MALEDINFO, *PMALEDINFO;

typedef struct _MAMTRINFO
{
	UINT8	ctrl;						/* control */
	UINT8	dsw;						/* direct sw */
	UINT8	blink;						/* blink */
	UINT8	freq;						/* frequency */
} MAMTRINFO, *PMAMTRINFO;

typedef struct _MA_SEQBUFINFO
{
	UINT8	sequence_flag;				/* sequence flag */
	UINT8 *	buf_ptr;					/* pointer to the buffer */
	UINT32	buf_size;					/* size of the buffer */
	UINT8	queue_flag;					/* queue flag */
	UINT32	queue_size;					/* size of data in queue */
	UINT32	queue_wptr;					/* write pointer */
	UINT32	wrote_size;					/* size of wrote data */
	UINT8	queue[2048];				/* queue */
} MA_SEQBUFINFO, *PMA_SEQBUFINFO;


typedef struct _MASNDDRVINFO
{
	UINT8	status;						/* status */
	UINT8	drum_mode;					/* drum mode */
	UINT8	dva_mode;					/* dva mode */
	UINT8	melody_mode;				/* melody mode */
	UINT8	drum_type;					/* drum type */
	UINT8	ch_num;						/* number of channel */
	UINT8	fm_num;						/* number of FM slot */
	UINT8	wt_num;						/* number of WT slot */
	UINT8	sa_num;						/* number of stream audio slot */
	UINT8	rb_num;						/* number of ram block */
	UINT32	speed;						/* speed */
	SINT8	key_offset;					/* key offset for key control */
	UINT8	master_volume;				/* master volume */
	UINT8	ctrl_volume;				/* control volume */
	UINT8	wave_velocity;				/* wave velocity */
	UINT8	wave_slave;					/* wave slave number */
	UINT8	time_base;					/* time base */
	UINT32	ch_map;						/* bit mapping of channel */
	UINT32	fm_map;						/* bit mapping of FM slot */
	UINT32	wt_map;						/* bit mapping of WT slot */
	UINT32	sa_map;						/* bit mapping of stream audio slot */
	UINT32	rb_map;						/* bit mapping of ram block */
	UINT32	ld_map;						/* bit mapping of led */
	UINT32	mt_map;						/* bit mapping of motor */
	UINT32	tm_map;						/* bit mapping of timer */
	UINT8	min_slot[3];				/* minimum slot number */
	UINT8	max_slot[3];				/* maximum slot number */
} MASNDDRVINFO;

typedef struct _MASLOTLIST
{
	UINT8	top[3];						/* top */
	UINT8	end[3];						/* end */
	UINT8	next[42];					/* next */
} MASLOTLIST, *PMASLOTLIST;

typedef struct _MASTREAMPARAM
{
	UINT8	panpot;						/* panpot */
	UINT8	stm;						/* stream */
	UINT8	pe;							/* pan enable */
	UINT8	panoff;						/* pan off */
	UINT8	mode;						/* mode */
	UINT16	end_point;					/* end point */
	UINT8	sa_id;						/* stream audio id */
	UINT8	vo_volume;					/* voice volume */
	UINT16	pitch;						/* pitch */
} MASTREAMPARAM, *PMASTREAMPARAM;

typedef struct _MASMW_CONTENTSINFO
{
	UINT16	code;						/* code type */
	UINT8	tag[2];						/* tag name */
	UINT8*	buf;						/* pointer to read buffer */
	UINT32	size;						/* size of read buffer */
} MASMW_CONTENTSINFO, *PMASMW_CONTENTSINFO;

typedef struct _MASMW_PHRASELIST
{
	UINT8	tag[2];						/* tag name */
	UINT32	start;						/* start point */
	UINT32	stop;						/* stop point */
} MASMW_PHRASELIST, *PMASMW_PHRASELIST;

typedef struct _MASMW_EVENTNOTE
{
	UINT8	ch;							/* channel number */
	UINT8	note;						/* note number */
} MASMW_EVENTNOTE, *PMASMW_EVENTNOTE;

SINT32 MaSndDrv_Initialize		( void );
SINT32 MaSndDrv_End				( void );
SINT32 MaSndDrv_Create			( UINT8 seq_type, UINT8 time_base, UINT8 cnv_mode, UINT8 res_mode, UINT8 sa_num, SINT32 (*func)(void), UINT32 * ram_adrs, UINT32 * ram_size );
SINT32 MaSndDrv_Free			( SINT32 seq_id );
SINT32 MaSndDrv_GetTimeError	( SINT32 seq_id );
SINT32 MaSndDrv_GetPos			( SINT32 seq_id );
SINT32 MaSndDrv_SetSpeed		( SINT32 seq_id, UINT8 val );
SINT32 MaSndDrv_SetSpeedWide	( SINT32 seq_id, UINT32 val );
SINT32 MaSndDrv_SetKey			( SINT32 seq_id, SINT8 val );
SINT32 MaSndDrv_SetKeyControl	( SINT32 seq_id, UINT8 ch, UINT8 val );
SINT32 MaSndDrv_SetFmExtWave	( SINT32 seq_id, UINT8 wave_no, UINT32 ram_adrs );
SINT32 MaSndDrv_SetVolume		( SINT32 seq_id, UINT8 volume );
SINT32 MaSndDrv_SetVoice		( SINT32 seq_id, UINT8 bank, UINT8 prog, UINT8 synth, UINT32 key, UINT32 address );
SINT32 MaSndDrv_GetVoice		( SINT32 seq_id, UINT8 bank, UINT8 prog );
SINT32 MaSndDrv_SetStream		( SINT32 seq_id, UINT8 wave_id, UINT8 format, UINT32 frequency, UINT8 * wave_ptr, UINT32 wave_size );
SINT32 MaSndDrv_SetCommand		( SINT32 seq_id, SINT32 delta_time, UINT32 cmd, UINT32 param1, UINT32 param2, UINT32 param3 );

SINT32 MaSndDrv_ControlSequencer( SINT32 id, UINT8 ctrl );

SINT32 MaSndDrv_DeviceControl	( UINT8 cmd, UINT8 param1, UINT8 param2, UINT8 param3 );

SINT32 MaSndDrv_UpdateSequence	( SINT32 id, UINT8 * buf_ptr, UINT32 buf_size );
void   MaSndDrv_UpdatePos		( SINT32 id, UINT8 ctrl );


#endif /*__MASNDDRV_H__*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -