📄 awe_voice.h
字号:
int src_bank, src_instr, src_key;} awe_voice_map;#define AWE_VOICE_MAP_SIZE sizeof(awe_voice_map)/*---------------------------------------------------------------- * awe hardware controls *----------------------------------------------------------------*/#define _AWE_DEBUG_MODE 0x00#define _AWE_REVERB_MODE 0x01#define _AWE_CHORUS_MODE 0x02#define _AWE_REMOVE_LAST_SAMPLES 0x03#define _AWE_INITIALIZE_CHIP 0x04#define _AWE_SEND_EFFECT 0x05#define _AWE_TERMINATE_CHANNEL 0x06#define _AWE_TERMINATE_ALL 0x07#define _AWE_INITIAL_VOLUME 0x08#define _AWE_INITIAL_ATTEN _AWE_INITIAL_VOLUME#define _AWE_RESET_CHANNEL 0x09#define _AWE_CHANNEL_MODE 0x0a#define _AWE_DRUM_CHANNELS 0x0b#define _AWE_MISC_MODE 0x0c#define _AWE_RELEASE_ALL 0x0d#define _AWE_NOTEOFF_ALL 0x0e#define _AWE_CHN_PRESSURE 0x0f/*#define _AWE_GET_CURRENT_MODE 0x10*/#define _AWE_EQUALIZER 0x11/*#define _AWE_GET_MISC_MODE 0x12*//*#define _AWE_GET_FONTINFO 0x13*/#define _AWE_MODE_FLAG 0x80#define _AWE_COOKED_FLAG 0x40 /* not supported */#define _AWE_MODE_VALUE_MASK 0x3F/*----------------------------------------------------------------*/#define _AWE_SET_CMD(p,dev,voice,cmd,p1,p2) \{((char*)(p))[0] = SEQ_PRIVATE;\ ((char*)(p))[1] = dev;\ ((char*)(p))[2] = _AWE_MODE_FLAG|(cmd);\ ((char*)(p))[3] = voice;\ ((unsigned short*)(p))[2] = p1;\ ((unsigned short*)(p))[3] = p2;}/* buffered access */#define _AWE_CMD(dev, voice, cmd, p1, p2) \{_SEQ_NEEDBUF(8);\ _AWE_SET_CMD(_seqbuf + _seqbufptr, dev, voice, cmd, p1, p2);\ _SEQ_ADVBUF(8);}/* direct access */#define _AWE_CMD_NOW(seqfd,dev,voice,cmd,p1,p2) \{struct seq_event_rec tmp;\ _AWE_SET_CMD(&tmp, dev, voice, cmd, p1, p2);\ ioctl(seqfd, SNDCTL_SEQ_OUTOFBAND, &tmp);}/*----------------------------------------------------------------*//* set debugging mode */#define AWE_DEBUG_MODE(dev,p1) _AWE_CMD(dev, 0, _AWE_DEBUG_MODE, p1, 0)/* set reverb mode; from 0 to 7 */#define AWE_REVERB_MODE(dev,p1) _AWE_CMD(dev, 0, _AWE_REVERB_MODE, p1, 0)/* set chorus mode; from 0 to 7 */#define AWE_CHORUS_MODE(dev,p1) _AWE_CMD(dev, 0, _AWE_CHORUS_MODE, p1, 0)/* reset channel */#define AWE_RESET_CHANNEL(dev,ch) _AWE_CMD(dev, ch, _AWE_RESET_CHANNEL, 0, 0)#define AWE_RESET_CONTROL(dev,ch) _AWE_CMD(dev, ch, _AWE_RESET_CHANNEL, 1, 0)/* send an effect to all layers */#define AWE_SEND_EFFECT(dev,voice,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,type,value)#define AWE_ADD_EFFECT(dev,voice,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((type)|0x80),value)#define AWE_UNSET_EFFECT(dev,voice,type) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((type)|0x40),0)/* send an effect to a layer */#define AWE_SEND_LAYER_EFFECT(dev,voice,layer,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((layer+1)<<8|(type)),value)#define AWE_ADD_LAYER_EFFECT(dev,voice,layer,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((layer+1)<<8|(type)|0x80),value)#define AWE_UNSET_LAYER_EFFECT(dev,voice,layer,type) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((layer+1)<<8|(type)|0x40),0)/* terminate sound on the channel/voice */#define AWE_TERMINATE_CHANNEL(dev,voice) _AWE_CMD(dev,voice,_AWE_TERMINATE_CHANNEL,0,0)/* terminate all sounds */#define AWE_TERMINATE_ALL(dev) _AWE_CMD(dev, 0, _AWE_TERMINATE_ALL, 0, 0)/* release all sounds (w/o sustain effect) */#define AWE_RELEASE_ALL(dev) _AWE_CMD(dev, 0, _AWE_RELEASE_ALL, 0, 0)/* note off all sounds (w sustain effect) */#define AWE_NOTEOFF_ALL(dev) _AWE_CMD(dev, 0, _AWE_NOTEOFF_ALL, 0, 0)/* set initial attenuation */#define AWE_INITIAL_VOLUME(dev,atten) _AWE_CMD(dev, 0, _AWE_INITIAL_VOLUME, atten, 0)#define AWE_INITIAL_ATTEN AWE_INITIAL_VOLUME/* relative attenuation */#define AWE_SET_ATTEN(dev,atten) _AWE_CMD(dev, 0, _AWE_INITIAL_VOLUME, atten, 1)/* set channel playing mode; mode=0/1/2 */#define AWE_SET_CHANNEL_MODE(dev,mode) _AWE_CMD(dev, 0, _AWE_CHANNEL_MODE, mode, 0)#define AWE_PLAY_INDIRECT 0 /* indirect voice mode (default) */#define AWE_PLAY_MULTI 1 /* multi note voice mode */#define AWE_PLAY_DIRECT 2 /* direct single voice mode */#define AWE_PLAY_MULTI2 3 /* sequencer2 mode; used internally *//* set drum channel mask; channels is 32bit long value */#define AWE_DRUM_CHANNELS(dev,channels) _AWE_CMD(dev, 0, _AWE_DRUM_CHANNELS, ((channels) & 0xffff), ((channels) >> 16))/* set bass and treble control; values are from 0 to 11 */#define AWE_EQUALIZER(dev,bass,treble) _AWE_CMD(dev, 0, _AWE_EQUALIZER, bass, treble)/* remove last loaded samples */#define AWE_REMOVE_LAST_SAMPLES(seqfd,dev) _AWE_CMD_NOW(seqfd, dev, 0, _AWE_REMOVE_LAST_SAMPLES, 0, 0)/* initialize emu8000 chip */#define AWE_INITIALIZE_CHIP(seqfd,dev) _AWE_CMD_NOW(seqfd, dev, 0, _AWE_INITIALIZE_CHIP, 0, 0)/* set miscellaneous modes; meta command */#define AWE_MISC_MODE(dev,mode,value) _AWE_CMD(dev, 0, _AWE_MISC_MODE, mode, value)/* exclusive sound off; 1=off */#define AWE_EXCLUSIVE_SOUND(dev,mode) AWE_MISC_MODE(dev,AWE_MD_EXCLUSIVE_SOUND,mode)/* default GUS bank number */#define AWE_SET_GUS_BANK(dev,bank) AWE_MISC_MODE(dev,AWE_MD_GUS_BANK,bank)/* change panning position in realtime; 0=don't 1=do */#define AWE_REALTIME_PAN(dev,mode) AWE_MISC_MODE(dev,AWE_MD_REALTIME_PAN,mode)/* extended pressure controls; not portable with other sound drivers */#define AWE_KEY_PRESSURE(dev,ch,note,vel) SEQ_START_NOTE(dev,ch,(note)+128,vel)#define AWE_CHN_PRESSURE(dev,ch,vel) _AWE_CMD(dev,ch,_AWE_CHN_PRESSURE,vel,0)/*----------------------------------------------------------------*//* reverb mode parameters */#define AWE_REVERB_ROOM1 0#define AWE_REVERB_ROOM2 1#define AWE_REVERB_ROOM3 2#define AWE_REVERB_HALL1 3#define AWE_REVERB_HALL2 4#define AWE_REVERB_PLATE 5#define AWE_REVERB_DELAY 6#define AWE_REVERB_PANNINGDELAY 7#define AWE_REVERB_PREDEFINED 8/* user can define reverb modes up to 32 */#define AWE_REVERB_NUMBERS 32typedef struct awe_reverb_fx_rec { unsigned short parms[28];} awe_reverb_fx_rec;/*----------------------------------------------------------------*//* chorus mode parameters */#define AWE_CHORUS_1 0#define AWE_CHORUS_2 1#define AWE_CHORUS_3 2#define AWE_CHORUS_4 3#define AWE_CHORUS_FEEDBACK 4#define AWE_CHORUS_FLANGER 5#define AWE_CHORUS_SHORTDELAY 6#define AWE_CHORUS_SHORTDELAY2 7#define AWE_CHORUS_PREDEFINED 8/* user can define chorus modes up to 32 */#define AWE_CHORUS_NUMBERS 32typedef struct awe_chorus_fx_rec { unsigned short feedback; /* feedback level (0xE600-0xE6FF) */ unsigned short delay_offset; /* delay (0-0x0DA3) [1/44100 sec] */ unsigned short lfo_depth; /* LFO depth (0xBC00-0xBCFF) */ unsigned int delay; /* right delay (0-0xFFFFFFFF) [1/256/44100 sec] */ unsigned int lfo_freq; /* LFO freq LFO freq (0-0xFFFFFFFF) */} awe_chorus_fx_rec;/*----------------------------------------------------------------*//* misc mode types */enum {/* 0*/ AWE_MD_EXCLUSIVE_OFF, /* obsolete *//* 1*/ AWE_MD_EXCLUSIVE_ON, /* obsolete *//* 2*/ AWE_MD_VERSION, /* read only *//* 3*/ AWE_MD_EXCLUSIVE_SOUND, /* ignored *//* 4*/ AWE_MD_REALTIME_PAN, /* 0/1: do realtime pan change (default=1) *//* 5*/ AWE_MD_GUS_BANK, /* bank number for GUS patches (default=0) *//* 6*/ AWE_MD_KEEP_EFFECT, /* 0/1: keep effect values, (default=0) *//* 7*/ AWE_MD_ZERO_ATTEN, /* attenuation of max volume (default=32) *//* 8*/ AWE_MD_CHN_PRIOR, /* 0/1: set MIDI channel priority mode (default=1) *//* 9*/ AWE_MD_MOD_SENSE, /* integer: modwheel sensitivity (def=18) *//*10*/ AWE_MD_DEF_PRESET, /* integer: default preset number (def=0) *//*11*/ AWE_MD_DEF_BANK, /* integer: default bank number (def=0) *//*12*/ AWE_MD_DEF_DRUM, /* integer: default drumset number (def=0) *//*13*/ AWE_MD_TOGGLE_DRUM_BANK, /* 0/1: toggle drum flag with bank# (def=0) */ AWE_MD_END,};/*----------------------------------------------------------------*//* effect parameters */enum {/* modulation envelope parameters *//* 0*/ AWE_FX_ENV1_DELAY, /* WORD: ENVVAL *//* 1*/ AWE_FX_ENV1_ATTACK, /* BYTE: up ATKHLD *//* 2*/ AWE_FX_ENV1_HOLD, /* BYTE: lw ATKHLD *//* 3*/ AWE_FX_ENV1_DECAY, /* BYTE: lw DCYSUS *//* 4*/ AWE_FX_ENV1_RELEASE, /* BYTE: lw DCYSUS *//* 5*/ AWE_FX_ENV1_SUSTAIN, /* BYTE: up DCYSUS *//* 6*/ AWE_FX_ENV1_PITCH, /* BYTE: up PEFE *//* 7*/ AWE_FX_ENV1_CUTOFF, /* BYTE: lw PEFE *//* volume envelope parameters *//* 8*/ AWE_FX_ENV2_DELAY, /* WORD: ENVVOL *//* 9*/ AWE_FX_ENV2_ATTACK, /* BYTE: up ATKHLDV *//*10*/ AWE_FX_ENV2_HOLD, /* BYTE: lw ATKHLDV *//*11*/ AWE_FX_ENV2_DECAY, /* BYTE: lw DCYSUSV *//*12*/ AWE_FX_ENV2_RELEASE, /* BYTE: lw DCYSUSV *//*13*/ AWE_FX_ENV2_SUSTAIN, /* BYTE: up DCYSUSV */ /* LFO1 (tremolo & vibrato) parameters *//*14*/ AWE_FX_LFO1_DELAY, /* WORD: LFO1VAL *//*15*/ AWE_FX_LFO1_FREQ, /* BYTE: lo TREMFRQ *//*16*/ AWE_FX_LFO1_VOLUME, /* BYTE: up TREMFRQ *//*17*/ AWE_FX_LFO1_PITCH, /* BYTE: up FMMOD *//*18*/ AWE_FX_LFO1_CUTOFF, /* BYTE: lo FMMOD *//* LFO2 (vibrato) parameters *//*19*/ AWE_FX_LFO2_DELAY, /* WORD: LFO2VAL *//*20*/ AWE_FX_LFO2_FREQ, /* BYTE: lo FM2FRQ2 *//*21*/ AWE_FX_LFO2_PITCH, /* BYTE: up FM2FRQ2 *//* Other overall effect parameters *//*22*/ AWE_FX_INIT_PITCH, /* SHORT: pitch offset *//*23*/ AWE_FX_CHORUS, /* BYTE: chorus effects send (0-255) *//*24*/ AWE_FX_REVERB, /* BYTE: reverb effects send (0-255) *//*25*/ AWE_FX_CUTOFF, /* BYTE: up IFATN *//*26*/ AWE_FX_FILTERQ, /* BYTE: up CCCA *//* Sample / loop offset changes *//*27*/ AWE_FX_SAMPLE_START, /* SHORT: offset *//*28*/ AWE_FX_LOOP_START, /* SHORT: offset *//*29*/ AWE_FX_LOOP_END, /* SHORT: offset *//*30*/ AWE_FX_COARSE_SAMPLE_START, /* SHORT: upper word offset *//*31*/ AWE_FX_COARSE_LOOP_START, /* SHORT: upper word offset *//*32*/ AWE_FX_COARSE_LOOP_END, /* SHORT: upper word offset *//*33*/ AWE_FX_ATTEN, /* BYTE: lo IFATN */ AWE_FX_END,};#endif /* AWE_VOICE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -