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

📄 awe_voice.h

📁 基于组件方式开发操作系统的OSKIT源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * sound/awe_voice.h * * Voice information definitions for the low level driver for the  * AWE32/SB32/AWE64 wave table synth. *   version 0.4.3; Feb. 1, 1999 * * Copyright (C) 1996-1999 Takashi Iwai * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#ifndef AWE_VOICE_H#define AWE_VOICE_H#ifndef SAMPLE_TYPE_AWE32#define SAMPLE_TYPE_AWE32	0x20#endif#ifndef _PATCHKEY#define _PATCHKEY(id) ((id<<8)|0xfd)#endif/*---------------------------------------------------------------- * patch information record *----------------------------------------------------------------*//* patch interface header: 16 bytes */typedef struct awe_patch_info {	short key;			/* use AWE_PATCH here */#define AWE_PATCH	_PATCHKEY(0x07)	short device_no;		/* synthesizer number */	unsigned short sf_id;		/* file id (should be zero) */	short optarg;			/* optional argument */	int len;			/* data length (without this header) */	short type;			/* patch operation type */#define AWE_LOAD_INFO		0	/* awe_voice_rec */#define AWE_LOAD_DATA		1	/* awe_sample_info */#define AWE_OPEN_PATCH		2	/* awe_open_parm */#define AWE_CLOSE_PATCH		3	/* none */#define AWE_UNLOAD_PATCH	4	/* none */#define AWE_REPLACE_DATA	5	/* awe_sample_info (optarg=#channels)*/#define AWE_MAP_PRESET		6	/* awe_voice_map *//*#define AWE_PROBE_INFO	7*/	/* awe_voice_map (pat only) */#define AWE_PROBE_DATA		8	/* optarg=sample */#define AWE_LOAD_CHORUS_FX	0x10	/* awe_chorus_fx_rec (optarg=mode) */#define AWE_LOAD_REVERB_FX	0x11	/* awe_reverb_fx_rec (optarg=mode) */	short reserved;			/* word alignment data */	/* the actual patch data begins after this */#if defined(AWE_COMPAT_030) && AWE_COMPAT_030	char data[0];#endif} awe_patch_info;/*#define AWE_PATCH_INFO_SIZE	16*/#define AWE_PATCH_INFO_SIZE	sizeof(awe_patch_info)/*---------------------------------------------------------------- * open patch *----------------------------------------------------------------*/#define AWE_PATCH_NAME_LEN	32typedef struct _awe_open_parm {	unsigned short type;		/* sample type */#define AWE_PAT_TYPE_MISC	0#define AWE_PAT_TYPE_GM		1#define AWE_PAT_TYPE_GS		2#define AWE_PAT_TYPE_MT32	3#define AWE_PAT_TYPE_XG		4#define AWE_PAT_TYPE_SFX	5#define AWE_PAT_TYPE_GUS	6#define AWE_PAT_TYPE_MAP	7#define AWE_PAT_LOCKED		0x100	/* lock the samples */#define AWE_PAT_SHARED		0x200	/* sample is shared */	short reserved;	char name[AWE_PATCH_NAME_LEN];} awe_open_parm;/*#define AWE_OPEN_PARM_SIZE	28*/#define AWE_OPEN_PARM_SIZE	sizeof(awe_open_parm)/*---------------------------------------------------------------- * raw voice information record *----------------------------------------------------------------*//* wave table envelope & effect parameters to control EMU8000 */typedef struct _awe_voice_parm {	unsigned short moddelay;	/* modulation delay (0x8000) */	unsigned short modatkhld;	/* modulation attack & hold time (0x7f7f) */	unsigned short moddcysus;	/* modulation decay & sustain (0x7f7f) */	unsigned short modrelease;	/* modulation release time (0x807f) */	short modkeyhold, modkeydecay;	/* envelope change per key (not used) */	unsigned short voldelay;	/* volume delay (0x8000) */	unsigned short volatkhld;	/* volume attack & hold time (0x7f7f) */	unsigned short voldcysus;	/* volume decay & sustain (0x7f7f) */	unsigned short volrelease;	/* volume release time (0x807f) */	short volkeyhold, volkeydecay;	/* envelope change per key (not used) */	unsigned short lfo1delay;	/* LFO1 delay (0x8000) */	unsigned short lfo2delay;	/* LFO2 delay (0x8000) */	unsigned short pefe;		/* modulation pitch & cutoff (0x0000) */	unsigned short fmmod;		/* LFO1 pitch & cutoff (0x0000) */	unsigned short tremfrq;		/* LFO1 volume & freq (0x0000) */	unsigned short fm2frq2;		/* LFO2 pitch & freq (0x0000) */	unsigned char cutoff;		/* initial cutoff (0xff) */	unsigned char filterQ;		/* initial filter Q [0-15] (0x0) */	unsigned char chorus;		/* chorus send (0x00) */	unsigned char reverb;		/* reverb send (0x00) */	unsigned short reserved[4];	/* not used */} awe_voice_parm;typedef struct _awe_voice_parm_block {	unsigned short moddelay;	/* modulation delay (0x8000) */	unsigned char modatk, modhld;	unsigned char moddcy, modsus;	unsigned char modrel, moddummy;	short modkeyhold, modkeydecay;	/* envelope change per key (not used) */	unsigned short voldelay;	/* volume delay (0x8000) */	unsigned char volatk, volhld;	unsigned char voldcy, volsus;	unsigned char volrel, voldummy;	short volkeyhold, volkeydecay;	/* envelope change per key (not used) */	unsigned short lfo1delay;	/* LFO1 delay (0x8000) */	unsigned short lfo2delay;	/* LFO2 delay (0x8000) */	unsigned char env1fc, env1pit;	unsigned char lfo1fc, lfo1pit;	unsigned char lfo1freq, lfo1vol;	unsigned char lfo2freq, lfo2pit;	unsigned char cutoff;		/* initial cutoff (0xff) */	unsigned char filterQ;		/* initial filter Q [0-15] (0x0) */	unsigned char chorus;		/* chorus send (0x00) */	unsigned char reverb;		/* reverb send (0x00) */	unsigned short reserved[4];	/* not used */} awe_voice_parm_block;#define AWE_VOICE_PARM_SIZE	48/* wave table parameters: 92 bytes */typedef struct _awe_voice_info {	unsigned short sf_id;		/* file id (should be zero) */	unsigned short sample;		/* sample id */	int start, end;			/* sample offset correction */	int loopstart, loopend;		/* loop offset correction */	short rate_offset;		/* sample rate pitch offset */	unsigned short mode;		/* sample mode */#define AWE_MODE_ROMSOUND		0x8000#define AWE_MODE_STEREO			1#define AWE_MODE_LOOPING		2#define AWE_MODE_NORELEASE		4	/* obsolete */#define AWE_MODE_INIT_PARM		8	short root;			/* midi root key */	short tune;			/* pitch tuning (in cents) */	char low, high;			/* key note range */	char vellow, velhigh;		/* velocity range */	char fixkey, fixvel;		/* fixed key, velocity */	char pan, fixpan;		/* panning, fixed panning */	short exclusiveClass;		/* exclusive class (0 = none) */	unsigned char amplitude;	/* sample volume (127 max) */	unsigned char attenuation;	/* attenuation (0.375dB) */	short scaleTuning;		/* pitch scale tuning(%), normally 100 */	awe_voice_parm parm;		/* voice envelope parameters */	short index;			/* internal index (set by driver) */} awe_voice_info;/*#define AWE_VOICE_INFO_SIZE	92*/#define AWE_VOICE_INFO_SIZE	sizeof(awe_voice_info)/*----------------------------------------------------------------*//* The info entry of awe_voice_rec is changed from 0 to 1 * for some compilers refusing zero size array. * Due to this change, sizeof(awe_voice_rec) becomes different * from older versions. * Use AWE_VOICE_REC_SIZE instead. *//* instrument info header: 4 bytes */typedef struct _awe_voice_rec_hdr {	unsigned char bank;		/* midi bank number */	unsigned char instr;		/* midi preset number */	char nvoices;			/* number of voices */	char write_mode;		/* write mode; normally 0 */#define AWE_WR_APPEND		0	/* append anyway */#define AWE_WR_EXCLUSIVE	1	/* skip if already exists */#define AWE_WR_REPLACE		2	/* replace if already exists */} awe_voice_rec_hdr;/*#define AWE_VOICE_REC_SIZE	4*/#define AWE_VOICE_REC_SIZE	sizeof(awe_voice_rec_hdr)/* the standard patch structure for one sample */typedef struct _awe_voice_rec_patch {	awe_patch_info		patch;	awe_voice_rec_hdr	hdr;	awe_voice_info		info;} awe_voice_rec_patch;/* obsolete data type */#if defined(AWE_COMPAT_030) && AWE_COMPAT_030#define AWE_INFOARRAY_SIZE	0#else#define AWE_INFOARRAY_SIZE	1#endiftypedef struct _awe_voice_rec {	unsigned char bank;		/* midi bank number */	unsigned char instr;		/* midi preset number */	short nvoices;			/* number of voices */	/* voice information follows here */	awe_voice_info info[AWE_INFOARRAY_SIZE];} awe_voice_rec;/*---------------------------------------------------------------- * sample wave information *----------------------------------------------------------------*//* wave table sample header: 32 bytes */typedef struct awe_sample_info {	unsigned short sf_id;		/* file id (should be zero) */	unsigned short sample;		/* sample id */	int start, end;			/* start & end offset */	int loopstart, loopend;		/* loop start & end offset */	int size;			/* size (0 = ROM) */	short checksum_flag;		/* use check sum = 1 */	unsigned short mode_flags;	/* mode flags */#define AWE_SAMPLE_8BITS	1	/* wave data is 8bits */#define AWE_SAMPLE_UNSIGNED	2	/* wave data is unsigned */#define AWE_SAMPLE_NO_BLANK	4	/* no blank loop is attached */#define AWE_SAMPLE_SINGLESHOT	8	/* single-shot w/o loop */#define AWE_SAMPLE_BIDIR_LOOP	16	/* bidirectional looping */#define AWE_SAMPLE_STEREO_LEFT	32	/* stereo left sound */#define AWE_SAMPLE_STEREO_RIGHT	64	/* stereo right sound */#define AWE_SAMPLE_REVERSE_LOOP 128	/* reverse looping */	unsigned int checksum;		/* check sum */#if defined(AWE_COMPAT_030) && AWE_COMPAT_030	unsigned short data[0];		/* sample data follows here */#endif} awe_sample_info;

⌨️ 快捷键说明

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