awe_voice.h 20 KB

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