2 * include/linux/awe_voice.h
4 * Voice information definitions for the low level driver for the
5 * AWE32/SB32/AWE64 wave table synth.
6 * version 0.4.4; Jan. 4, 2000
8 * Copyright (C) 1996-2000 Takashi Iwai
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28 #ifndef SAMPLE_TYPE_AWE32
29 #define SAMPLE_TYPE_AWE32 0x20
32 #define _LINUX_PATCHKEY_H_INDIRECT
33 #include <linux/patchkey.h>
34 #undef _LINUX_PATCHKEY_H_INDIRECT
36 /*----------------------------------------------------------------
37 * patch information record
38 *----------------------------------------------------------------*/
40 /* patch interface header: 16 bytes */
41 typedef struct awe_patch_info
{
42 short key
; /* use AWE_PATCH here */
43 #define AWE_PATCH _PATCHKEY(0x07)
45 short device_no
; /* synthesizer number */
46 unsigned short sf_id
; /* file id (should be zero) */
47 short optarg
; /* optional argument */
48 int len
; /* data length (without this header) */
50 short type
; /* patch operation type */
51 #define AWE_LOAD_INFO 0 /* awe_voice_rec */
52 #define AWE_LOAD_DATA 1 /* awe_sample_info */
53 #define AWE_OPEN_PATCH 2 /* awe_open_parm */
54 #define AWE_CLOSE_PATCH 3 /* none */
55 #define AWE_UNLOAD_PATCH 4 /* none */
56 #define AWE_REPLACE_DATA 5 /* awe_sample_info (optarg=#channels)*/
57 #define AWE_MAP_PRESET 6 /* awe_voice_map */
58 /*#define AWE_PROBE_INFO 7*/ /* awe_voice_map (pat only) */
59 #define AWE_PROBE_DATA 8 /* optarg=sample */
60 #define AWE_REMOVE_INFO 9 /* optarg=(bank<<8)|instr */
61 #define AWE_LOAD_CHORUS_FX 0x10 /* awe_chorus_fx_rec (optarg=mode) */
62 #define AWE_LOAD_REVERB_FX 0x11 /* awe_reverb_fx_rec (optarg=mode) */
64 short reserved
; /* word alignment data */
66 /* the actual patch data begins after this */
67 #if defined(AWE_COMPAT_030) && AWE_COMPAT_030
72 /*#define AWE_PATCH_INFO_SIZE 16*/
73 #define AWE_PATCH_INFO_SIZE sizeof(awe_patch_info)
76 /*----------------------------------------------------------------
78 *----------------------------------------------------------------*/
80 #define AWE_PATCH_NAME_LEN 32
82 typedef struct _awe_open_parm
{
83 unsigned short type
; /* sample type */
84 #define AWE_PAT_TYPE_MISC 0
85 #define AWE_PAT_TYPE_GM 1
86 #define AWE_PAT_TYPE_GS 2
87 #define AWE_PAT_TYPE_MT32 3
88 #define AWE_PAT_TYPE_XG 4
89 #define AWE_PAT_TYPE_SFX 5
90 #define AWE_PAT_TYPE_GUS 6
91 #define AWE_PAT_TYPE_MAP 7
93 #define AWE_PAT_LOCKED 0x100 /* lock the samples */
94 #define AWE_PAT_SHARED 0x200 /* sample is shared */
97 char name
[AWE_PATCH_NAME_LEN
];
100 /*#define AWE_OPEN_PARM_SIZE 28*/
101 #define AWE_OPEN_PARM_SIZE sizeof(awe_open_parm)
104 /*----------------------------------------------------------------
105 * raw voice information record
106 *----------------------------------------------------------------*/
108 /* wave table envelope & effect parameters to control EMU8000 */
109 typedef struct _awe_voice_parm
{
110 unsigned short moddelay
; /* modulation delay (0x8000) */
111 unsigned short modatkhld
; /* modulation attack & hold time (0x7f7f) */
112 unsigned short moddcysus
; /* modulation decay & sustain (0x7f7f) */
113 unsigned short modrelease
; /* modulation release time (0x807f) */
114 short modkeyhold
, modkeydecay
; /* envelope change per key (not used) */
115 unsigned short voldelay
; /* volume delay (0x8000) */
116 unsigned short volatkhld
; /* volume attack & hold time (0x7f7f) */
117 unsigned short voldcysus
; /* volume decay & sustain (0x7f7f) */
118 unsigned short volrelease
; /* volume release time (0x807f) */
119 short volkeyhold
, volkeydecay
; /* envelope change per key (not used) */
120 unsigned short lfo1delay
; /* LFO1 delay (0x8000) */
121 unsigned short lfo2delay
; /* LFO2 delay (0x8000) */
122 unsigned short pefe
; /* modulation pitch & cutoff (0x0000) */
123 unsigned short fmmod
; /* LFO1 pitch & cutoff (0x0000) */
124 unsigned short tremfrq
; /* LFO1 volume & freq (0x0000) */
125 unsigned short fm2frq2
; /* LFO2 pitch & freq (0x0000) */
126 unsigned char cutoff
; /* initial cutoff (0xff) */
127 unsigned char filterQ
; /* initial filter Q [0-15] (0x0) */
128 unsigned char chorus
; /* chorus send (0x00) */
129 unsigned char reverb
; /* reverb send (0x00) */
130 unsigned short reserved
[4]; /* not used */
133 typedef struct _awe_voice_parm_block
{
134 unsigned short moddelay
; /* modulation delay (0x8000) */
135 unsigned char modatk
, modhld
;
136 unsigned char moddcy
, modsus
;
137 unsigned char modrel
, moddummy
;
138 short modkeyhold
, modkeydecay
; /* envelope change per key (not used) */
139 unsigned short voldelay
; /* volume delay (0x8000) */
140 unsigned char volatk
, volhld
;
141 unsigned char voldcy
, volsus
;
142 unsigned char volrel
, voldummy
;
143 short volkeyhold
, volkeydecay
; /* envelope change per key (not used) */
144 unsigned short lfo1delay
; /* LFO1 delay (0x8000) */
145 unsigned short lfo2delay
; /* LFO2 delay (0x8000) */
146 unsigned char env1fc
, env1pit
;
147 unsigned char lfo1fc
, lfo1pit
;
148 unsigned char lfo1freq
, lfo1vol
;
149 unsigned char lfo2freq
, lfo2pit
;
150 unsigned char cutoff
; /* initial cutoff (0xff) */
151 unsigned char filterQ
; /* initial filter Q [0-15] (0x0) */
152 unsigned char chorus
; /* chorus send (0x00) */
153 unsigned char reverb
; /* reverb send (0x00) */
154 unsigned short reserved
[4]; /* not used */
155 } awe_voice_parm_block
;
157 #define AWE_VOICE_PARM_SIZE 48
160 /* wave table parameters: 92 bytes */
161 typedef struct _awe_voice_info
{
162 unsigned short sf_id
; /* file id (should be zero) */
163 unsigned short sample
; /* sample id */
164 int start
, end
; /* sample offset correction */
165 int loopstart
, loopend
; /* loop offset correction */
166 short rate_offset
; /* sample rate pitch offset */
167 unsigned short mode
; /* sample mode */
168 #define AWE_MODE_ROMSOUND 0x8000
169 #define AWE_MODE_STEREO 1
170 #define AWE_MODE_LOOPING 2
171 #define AWE_MODE_NORELEASE 4 /* obsolete */
172 #define AWE_MODE_INIT_PARM 8
174 short root
; /* midi root key */
175 short tune
; /* pitch tuning (in cents) */
176 signed char low
, high
; /* key note range */
177 signed char vellow
, velhigh
; /* velocity range */
178 signed char fixkey
, fixvel
; /* fixed key, velocity */
179 signed char pan
, fixpan
; /* panning, fixed panning */
180 short exclusiveClass
; /* exclusive class (0 = none) */
181 unsigned char amplitude
; /* sample volume (127 max) */
182 unsigned char attenuation
; /* attenuation (0.375dB) */
183 short scaleTuning
; /* pitch scale tuning(%), normally 100 */
184 awe_voice_parm parm
; /* voice envelope parameters */
185 short index
; /* internal index (set by driver) */
188 /*#define AWE_VOICE_INFO_SIZE 92*/
189 #define AWE_VOICE_INFO_SIZE sizeof(awe_voice_info)
191 /*----------------------------------------------------------------*/
193 /* The info entry of awe_voice_rec is changed from 0 to 1
194 * for some compilers refusing zero size array.
195 * Due to this change, sizeof(awe_voice_rec) becomes different
196 * from older versions.
197 * Use AWE_VOICE_REC_SIZE instead.
200 /* instrument info header: 4 bytes */
201 typedef struct _awe_voice_rec_hdr
{
202 unsigned char bank
; /* midi bank number */
203 unsigned char instr
; /* midi preset number */
204 char nvoices
; /* number of voices */
205 char write_mode
; /* write mode; normally 0 */
206 #define AWE_WR_APPEND 0 /* append anyway */
207 #define AWE_WR_EXCLUSIVE 1 /* skip if already exists */
208 #define AWE_WR_REPLACE 2 /* replace if already exists */
211 /*#define AWE_VOICE_REC_SIZE 4*/
212 #define AWE_VOICE_REC_SIZE sizeof(awe_voice_rec_hdr)
214 /* the standard patch structure for one sample */
215 typedef struct _awe_voice_rec_patch
{
216 awe_patch_info patch
;
217 awe_voice_rec_hdr hdr
;
219 } awe_voice_rec_patch
;
222 /* obsolete data type */
223 #if defined(AWE_COMPAT_030) && AWE_COMPAT_030
224 #define AWE_INFOARRAY_SIZE 0
226 #define AWE_INFOARRAY_SIZE 1
229 typedef struct _awe_voice_rec
{
230 unsigned char bank
; /* midi bank number */
231 unsigned char instr
; /* midi preset number */
232 short nvoices
; /* number of voices */
233 /* voice information follows here */
234 awe_voice_info info
[AWE_INFOARRAY_SIZE
];
238 /*----------------------------------------------------------------
239 * sample wave information
240 *----------------------------------------------------------------*/
242 /* wave table sample header: 32 bytes */
243 typedef struct awe_sample_info
{
244 unsigned short sf_id
; /* file id (should be zero) */
245 unsigned short sample
; /* sample id */
246 int start
, end
; /* start & end offset */
247 int loopstart
, loopend
; /* loop start & end offset */
248 int size
; /* size (0 = ROM) */
249 short checksum_flag
; /* use check sum = 1 */
250 unsigned short mode_flags
; /* mode flags */
251 #define AWE_SAMPLE_8BITS 1 /* wave data is 8bits */
252 #define AWE_SAMPLE_UNSIGNED 2 /* wave data is unsigned */
253 #define AWE_SAMPLE_NO_BLANK 4 /* no blank loop is attached */
254 #define AWE_SAMPLE_SINGLESHOT 8 /* single-shot w/o loop */
255 #define AWE_SAMPLE_BIDIR_LOOP 16 /* bidirectional looping */
256 #define AWE_SAMPLE_STEREO_LEFT 32 /* stereo left sound */
257 #define AWE_SAMPLE_STEREO_RIGHT 64 /* stereo right sound */
258 #define AWE_SAMPLE_REVERSE_LOOP 128 /* reverse looping */
259 unsigned int checksum
; /* check sum */
260 #if defined(AWE_COMPAT_030) && AWE_COMPAT_030
261 unsigned short data
[0]; /* sample data follows here */
265 /*#define AWE_SAMPLE_INFO_SIZE 32*/
266 #define AWE_SAMPLE_INFO_SIZE sizeof(awe_sample_info)
269 /*----------------------------------------------------------------
270 * voice preset mapping
271 *----------------------------------------------------------------*/
273 typedef struct awe_voice_map
{
274 int map_bank
, map_instr
, map_key
; /* key = -1 means all keys */
275 int src_bank
, src_instr
, src_key
;
278 #define AWE_VOICE_MAP_SIZE sizeof(awe_voice_map)
281 /*----------------------------------------------------------------
282 * awe hardware controls
283 *----------------------------------------------------------------*/
285 #define _AWE_DEBUG_MODE 0x00
286 #define _AWE_REVERB_MODE 0x01
287 #define _AWE_CHORUS_MODE 0x02
288 #define _AWE_REMOVE_LAST_SAMPLES 0x03
289 #define _AWE_INITIALIZE_CHIP 0x04
290 #define _AWE_SEND_EFFECT 0x05
291 #define _AWE_TERMINATE_CHANNEL 0x06
292 #define _AWE_TERMINATE_ALL 0x07
293 #define _AWE_INITIAL_VOLUME 0x08
294 #define _AWE_INITIAL_ATTEN _AWE_INITIAL_VOLUME
295 #define _AWE_RESET_CHANNEL 0x09
296 #define _AWE_CHANNEL_MODE 0x0a
297 #define _AWE_DRUM_CHANNELS 0x0b
298 #define _AWE_MISC_MODE 0x0c
299 #define _AWE_RELEASE_ALL 0x0d
300 #define _AWE_NOTEOFF_ALL 0x0e
301 #define _AWE_CHN_PRESSURE 0x0f
302 /*#define _AWE_GET_CURRENT_MODE 0x10*/
303 #define _AWE_EQUALIZER 0x11
304 /*#define _AWE_GET_MISC_MODE 0x12*/
305 /*#define _AWE_GET_FONTINFO 0x13*/
307 #define _AWE_MODE_FLAG 0x80
308 #define _AWE_COOKED_FLAG 0x40 /* not supported */
309 #define _AWE_MODE_VALUE_MASK 0x3F
311 /*----------------------------------------------------------------*/
313 #define _AWE_SET_CMD(p,dev,voice,cmd,p1,p2) \
314 {((char*)(p))[0] = SEQ_PRIVATE;\
315 ((char*)(p))[1] = dev;\
316 ((char*)(p))[2] = _AWE_MODE_FLAG|(cmd);\
317 ((char*)(p))[3] = voice;\
318 ((unsigned short*)(p))[2] = p1;\
319 ((unsigned short*)(p))[3] = p2;}
321 /* buffered access */
322 #define _AWE_CMD(dev, voice, cmd, p1, p2) \
324 _AWE_SET_CMD(_seqbuf + _seqbufptr, dev, voice, cmd, p1, p2);\
328 #define _AWE_CMD_NOW(seqfd,dev,voice,cmd,p1,p2) \
329 {struct seq_event_rec tmp;\
330 _AWE_SET_CMD(&tmp, dev, voice, cmd, p1, p2);\
331 ioctl(seqfd, SNDCTL_SEQ_OUTOFBAND, &tmp);}
333 /*----------------------------------------------------------------*/
335 /* set debugging mode */
336 #define AWE_DEBUG_MODE(dev,p1) _AWE_CMD(dev, 0, _AWE_DEBUG_MODE, p1, 0)
337 /* set reverb mode; from 0 to 7 */
338 #define AWE_REVERB_MODE(dev,p1) _AWE_CMD(dev, 0, _AWE_REVERB_MODE, p1, 0)
339 /* set chorus mode; from 0 to 7 */
340 #define AWE_CHORUS_MODE(dev,p1) _AWE_CMD(dev, 0, _AWE_CHORUS_MODE, p1, 0)
343 #define AWE_RESET_CHANNEL(dev,ch) _AWE_CMD(dev, ch, _AWE_RESET_CHANNEL, 0, 0)
344 #define AWE_RESET_CONTROL(dev,ch) _AWE_CMD(dev, ch, _AWE_RESET_CHANNEL, 1, 0)
346 /* send an effect to all layers */
347 #define AWE_SEND_EFFECT(dev,voice,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,type,value)
348 #define AWE_ADD_EFFECT(dev,voice,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((type)|0x80),value)
349 #define AWE_UNSET_EFFECT(dev,voice,type) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((type)|0x40),0)
350 /* send an effect to a layer */
351 #define AWE_SEND_LAYER_EFFECT(dev,voice,layer,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((layer+1)<<8|(type)),value)
352 #define AWE_ADD_LAYER_EFFECT(dev,voice,layer,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((layer+1)<<8|(type)|0x80),value)
353 #define AWE_UNSET_LAYER_EFFECT(dev,voice,layer,type) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((layer+1)<<8|(type)|0x40),0)
355 /* terminate sound on the channel/voice */
356 #define AWE_TERMINATE_CHANNEL(dev,voice) _AWE_CMD(dev,voice,_AWE_TERMINATE_CHANNEL,0,0)
357 /* terminate all sounds */
358 #define AWE_TERMINATE_ALL(dev) _AWE_CMD(dev, 0, _AWE_TERMINATE_ALL, 0, 0)
359 /* release all sounds (w/o sustain effect) */
360 #define AWE_RELEASE_ALL(dev) _AWE_CMD(dev, 0, _AWE_RELEASE_ALL, 0, 0)
361 /* note off all sounds (w sustain effect) */
362 #define AWE_NOTEOFF_ALL(dev) _AWE_CMD(dev, 0, _AWE_NOTEOFF_ALL, 0, 0)
364 /* set initial attenuation */
365 #define AWE_INITIAL_VOLUME(dev,atten) _AWE_CMD(dev, 0, _AWE_INITIAL_VOLUME, atten, 0)
366 #define AWE_INITIAL_ATTEN AWE_INITIAL_VOLUME
367 /* relative attenuation */
368 #define AWE_SET_ATTEN(dev,atten) _AWE_CMD(dev, 0, _AWE_INITIAL_VOLUME, atten, 1)
370 /* set channel playing mode; mode=0/1/2 */
371 #define AWE_SET_CHANNEL_MODE(dev,mode) _AWE_CMD(dev, 0, _AWE_CHANNEL_MODE, mode, 0)
372 #define AWE_PLAY_INDIRECT 0 /* indirect voice mode (default) */
373 #define AWE_PLAY_MULTI 1 /* multi note voice mode */
374 #define AWE_PLAY_DIRECT 2 /* direct single voice mode */
375 #define AWE_PLAY_MULTI2 3 /* sequencer2 mode; used internally */
377 /* set drum channel mask; channels is 32bit long value */
378 #define AWE_DRUM_CHANNELS(dev,channels) _AWE_CMD(dev, 0, _AWE_DRUM_CHANNELS, ((channels) & 0xffff), ((channels) >> 16))
380 /* set bass and treble control; values are from 0 to 11 */
381 #define AWE_EQUALIZER(dev,bass,treble) _AWE_CMD(dev, 0, _AWE_EQUALIZER, bass, treble)
383 /* remove last loaded samples */
384 #define AWE_REMOVE_LAST_SAMPLES(seqfd,dev) _AWE_CMD_NOW(seqfd, dev, 0, _AWE_REMOVE_LAST_SAMPLES, 0, 0)
385 /* initialize emu8000 chip */
386 #define AWE_INITIALIZE_CHIP(seqfd,dev) _AWE_CMD_NOW(seqfd, dev, 0, _AWE_INITIALIZE_CHIP, 0, 0)
388 /* set miscellaneous modes; meta command */
389 #define AWE_MISC_MODE(dev,mode,value) _AWE_CMD(dev, 0, _AWE_MISC_MODE, mode, value)
390 /* exclusive sound off; 1=off */
391 #define AWE_EXCLUSIVE_SOUND(dev,mode) AWE_MISC_MODE(dev,AWE_MD_EXCLUSIVE_SOUND,mode)
392 /* default GUS bank number */
393 #define AWE_SET_GUS_BANK(dev,bank) AWE_MISC_MODE(dev,AWE_MD_GUS_BANK,bank)
394 /* change panning position in realtime; 0=don't 1=do */
395 #define AWE_REALTIME_PAN(dev,mode) AWE_MISC_MODE(dev,AWE_MD_REALTIME_PAN,mode)
397 /* extended pressure controls; not portable with other sound drivers */
398 #define AWE_KEY_PRESSURE(dev,ch,note,vel) SEQ_START_NOTE(dev,ch,(note)+128,vel)
399 #define AWE_CHN_PRESSURE(dev,ch,vel) _AWE_CMD(dev,ch,_AWE_CHN_PRESSURE,vel,0)
401 /*----------------------------------------------------------------*/
403 /* reverb mode parameters */
404 #define AWE_REVERB_ROOM1 0
405 #define AWE_REVERB_ROOM2 1
406 #define AWE_REVERB_ROOM3 2
407 #define AWE_REVERB_HALL1 3
408 #define AWE_REVERB_HALL2 4
409 #define AWE_REVERB_PLATE 5
410 #define AWE_REVERB_DELAY 6
411 #define AWE_REVERB_PANNINGDELAY 7
412 #define AWE_REVERB_PREDEFINED 8
413 /* user can define reverb modes up to 32 */
414 #define AWE_REVERB_NUMBERS 32
416 typedef struct awe_reverb_fx_rec
{
417 unsigned short parms
[28];
420 /*----------------------------------------------------------------*/
422 /* chorus mode parameters */
423 #define AWE_CHORUS_1 0
424 #define AWE_CHORUS_2 1
425 #define AWE_CHORUS_3 2
426 #define AWE_CHORUS_4 3
427 #define AWE_CHORUS_FEEDBACK 4
428 #define AWE_CHORUS_FLANGER 5
429 #define AWE_CHORUS_SHORTDELAY 6
430 #define AWE_CHORUS_SHORTDELAY2 7
431 #define AWE_CHORUS_PREDEFINED 8
432 /* user can define chorus modes up to 32 */
433 #define AWE_CHORUS_NUMBERS 32
435 typedef struct awe_chorus_fx_rec
{
436 unsigned short feedback
; /* feedback level (0xE600-0xE6FF) */
437 unsigned short delay_offset
; /* delay (0-0x0DA3) [1/44100 sec] */
438 unsigned short lfo_depth
; /* LFO depth (0xBC00-0xBCFF) */
439 unsigned int delay
; /* right delay (0-0xFFFFFFFF) [1/256/44100 sec] */
440 unsigned int lfo_freq
; /* LFO freq LFO freq (0-0xFFFFFFFF) */
443 /*----------------------------------------------------------------*/
445 /* misc mode types */
447 /* 0*/ AWE_MD_EXCLUSIVE_OFF
, /* obsolete */
448 /* 1*/ AWE_MD_EXCLUSIVE_ON
, /* obsolete */
449 /* 2*/ AWE_MD_VERSION
, /* read only */
450 /* 3*/ AWE_MD_EXCLUSIVE_SOUND
, /* 0/1: exclusive note on (default=1) */
451 /* 4*/ AWE_MD_REALTIME_PAN
, /* 0/1: do realtime pan change (default=1) */
452 /* 5*/ AWE_MD_GUS_BANK
, /* bank number for GUS patches (default=0) */
453 /* 6*/ AWE_MD_KEEP_EFFECT
, /* 0/1: keep effect values, (default=0) */
454 /* 7*/ AWE_MD_ZERO_ATTEN
, /* attenuation of max volume (default=32) */
455 /* 8*/ AWE_MD_CHN_PRIOR
, /* 0/1: set MIDI channel priority mode (default=1) */
456 /* 9*/ AWE_MD_MOD_SENSE
, /* integer: modwheel sensitivity (def=18) */
457 /*10*/ AWE_MD_DEF_PRESET
, /* integer: default preset number (def=0) */
458 /*11*/ AWE_MD_DEF_BANK
, /* integer: default bank number (def=0) */
459 /*12*/ AWE_MD_DEF_DRUM
, /* integer: default drumset number (def=0) */
460 /*13*/ AWE_MD_TOGGLE_DRUM_BANK
, /* 0/1: toggle drum flag with bank# (def=0) */
461 /*14*/ AWE_MD_NEW_VOLUME_CALC
, /* 0/1: volume calculation mode (def=1) */
462 /*15*/ AWE_MD_CHORUS_MODE
, /* integer: chorus mode (def=2) */
463 /*16*/ AWE_MD_REVERB_MODE
, /* integer: chorus mode (def=4) */
464 /*17*/ AWE_MD_BASS_LEVEL
, /* integer: bass level (def=5) */
465 /*18*/ AWE_MD_TREBLE_LEVEL
, /* integer: treble level (def=9) */
466 /*19*/ AWE_MD_DEBUG_MODE
, /* integer: debug level (def=0) */
467 /*20*/ AWE_MD_PAN_EXCHANGE
, /* 0/1: exchange panning direction (def=0) */
471 /*----------------------------------------------------------------*/
473 /* effect parameters */
476 /* modulation envelope parameters */
477 /* 0*/ AWE_FX_ENV1_DELAY
, /* WORD: ENVVAL */
478 /* 1*/ AWE_FX_ENV1_ATTACK
, /* BYTE: up ATKHLD */
479 /* 2*/ AWE_FX_ENV1_HOLD
, /* BYTE: lw ATKHLD */
480 /* 3*/ AWE_FX_ENV1_DECAY
, /* BYTE: lw DCYSUS */
481 /* 4*/ AWE_FX_ENV1_RELEASE
, /* BYTE: lw DCYSUS */
482 /* 5*/ AWE_FX_ENV1_SUSTAIN
, /* BYTE: up DCYSUS */
483 /* 6*/ AWE_FX_ENV1_PITCH
, /* BYTE: up PEFE */
484 /* 7*/ AWE_FX_ENV1_CUTOFF
, /* BYTE: lw PEFE */
486 /* volume envelope parameters */
487 /* 8*/ AWE_FX_ENV2_DELAY
, /* WORD: ENVVOL */
488 /* 9*/ AWE_FX_ENV2_ATTACK
, /* BYTE: up ATKHLDV */
489 /*10*/ AWE_FX_ENV2_HOLD
, /* BYTE: lw ATKHLDV */
490 /*11*/ AWE_FX_ENV2_DECAY
, /* BYTE: lw DCYSUSV */
491 /*12*/ AWE_FX_ENV2_RELEASE
, /* BYTE: lw DCYSUSV */
492 /*13*/ AWE_FX_ENV2_SUSTAIN
, /* BYTE: up DCYSUSV */
494 /* LFO1 (tremolo & vibrato) parameters */
495 /*14*/ AWE_FX_LFO1_DELAY
, /* WORD: LFO1VAL */
496 /*15*/ AWE_FX_LFO1_FREQ
, /* BYTE: lo TREMFRQ */
497 /*16*/ AWE_FX_LFO1_VOLUME
, /* BYTE: up TREMFRQ */
498 /*17*/ AWE_FX_LFO1_PITCH
, /* BYTE: up FMMOD */
499 /*18*/ AWE_FX_LFO1_CUTOFF
, /* BYTE: lo FMMOD */
501 /* LFO2 (vibrato) parameters */
502 /*19*/ AWE_FX_LFO2_DELAY
, /* WORD: LFO2VAL */
503 /*20*/ AWE_FX_LFO2_FREQ
, /* BYTE: lo FM2FRQ2 */
504 /*21*/ AWE_FX_LFO2_PITCH
, /* BYTE: up FM2FRQ2 */
506 /* Other overall effect parameters */
507 /*22*/ AWE_FX_INIT_PITCH
, /* SHORT: pitch offset */
508 /*23*/ AWE_FX_CHORUS
, /* BYTE: chorus effects send (0-255) */
509 /*24*/ AWE_FX_REVERB
, /* BYTE: reverb effects send (0-255) */
510 /*25*/ AWE_FX_CUTOFF
, /* BYTE: up IFATN */
511 /*26*/ AWE_FX_FILTERQ
, /* BYTE: up CCCA */
513 /* Sample / loop offset changes */
514 /*27*/ AWE_FX_SAMPLE_START
, /* SHORT: offset */
515 /*28*/ AWE_FX_LOOP_START
, /* SHORT: offset */
516 /*29*/ AWE_FX_LOOP_END
, /* SHORT: offset */
517 /*30*/ AWE_FX_COARSE_SAMPLE_START
, /* SHORT: upper word offset */
518 /*31*/ AWE_FX_COARSE_LOOP_START
, /* SHORT: upper word offset */
519 /*32*/ AWE_FX_COARSE_LOOP_END
, /* SHORT: upper word offset */
520 /*33*/ AWE_FX_ATTEN
, /* BYTE: lo IFATN */
525 #endif /* AWE_VOICE_H */