home *** CD-ROM | disk | FTP | other *** search
/ Zodiac Super OZ / MEDIADEPOT.ISO / FILES / 15 / GMS100.ZIP / gms100 / source / inst.h < prev    next >
C/C++ Source or Header  |  1996-05-15  |  1KB  |  68 lines

  1. // Stuff relating to the instrument class
  2.  
  3. union am_vib_union {
  4.   unsigned char byte;
  5.   struct {
  6.     unsigned frequency_multiple: 4;
  7.     unsigned keyboard_scaling_rate: 1;
  8.     unsigned hold_at_sustain: 1;
  9.     unsigned apply_vibrato: 1;
  10.     unsigned apply_amplitude_modulation: 1;
  11.   } bitmap;
  12. };
  13.  
  14. union scaling_volume_union {
  15.   unsigned char byte;
  16.   struct {
  17.     unsigned volume: 6;
  18.     unsigned scaling_level: 2;
  19.   } bitmap;
  20. };
  21.  
  22. union a_d_union {
  23.   unsigned char byte;
  24.   struct {
  25.     unsigned decay: 4;
  26.     unsigned attack: 4;
  27.   } bitmap;
  28. };
  29.  
  30. union s_r_union {
  31.   unsigned char byte;
  32.   struct {
  33.     unsigned release: 4;
  34.     unsigned sustain: 4;
  35.   } bitmap;
  36. };
  37.  
  38. union op1mod_feedback_union {
  39.   unsigned char byte;
  40.   struct {
  41.     unsigned additive_synthesis: 1;
  42.     unsigned feedback_strength: 3;
  43.   } bitmap;
  44. };
  45.  
  46. union wave_union {
  47.   unsigned char byte;
  48.   struct {
  49.     unsigned waveform: 3;
  50.   } bitmap;
  51. };
  52.  
  53. class instrument {
  54. public:
  55.   enum inst_types {type_synth, type_sample} type;
  56.   unsigned int *sampledata;
  57.   am_vib_union am_vib1, am_vib2;
  58.   scaling_volume_union scaling_volume1, scaling_volume2;
  59.   a_d_union a_d1, a_d2;
  60.   s_r_union s_r1, s_r2;
  61.   op1mod_feedback_union op1mod_feedback;
  62.   wave_union wave1, wave2;
  63.   char *name;
  64.  
  65.   instrument();
  66.   ~instrument();
  67. };
  68.