home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / audio / tracker / channel.h < prev    next >
C/C++ Source or Header  |  2014-05-19  |  4KB  |  111 lines

  1. /* channel.h */
  2.  
  3. /* $Author: espie $
  4.  * $Id: channel.h,v 2.3 1991/12/03 23:03:39 espie Exp espie $
  5.  * $Revision: 2.3 $
  6.  * $Log: channel.h,v $
  7.  * Revision 2.3  1991/12/03  23:03:39  espie
  8.  * Added transpose feature.
  9.  *
  10.  * Revision 2.2  1991/11/19  16:07:19  espie
  11.  * Added comments, moved minor stuff around.
  12.  *
  13.  * Revision 2.1  1991/11/17  23:07:58  espie
  14.  * Added some comments.
  15.  *
  16.  * Revision 2.0  1991/11/17  21:42:08  espie
  17.  * Structured part of the code, especially replay ``automaton''
  18.  * and setting up of effects.
  19.  *
  20.  * Revision 1.5  1991/11/16  16:54:19  espie
  21.  * Added comments to each and every field.
  22.  *
  23.  * Revision 1.4  1991/11/16  15:42:43  espie
  24.  * tabs.
  25.  *
  26.  * Revision 1.3  1991/11/09  17:47:33  espie
  27.  * Bug correction: when doing arpeggio, there might not
  28.  * be a new note, so we have to save the old note value
  29.  * and do the arppeggio on that note.
  30.  *
  31.  * Revision 1.2  1991/11/07  21:40:16  espie
  32.  * Added fields for arpeggio.
  33.  *
  34.  * Revision 1.1  1991/11/06  09:46:06  espie
  35.  * Initial revision
  36.  *
  37.  *
  38.  */
  39.  
  40.      
  41. /* DO_NOTHING is also used for the automaton */
  42. #define DO_NOTHING 0
  43. #define PLAY 1
  44. #define REPLAY 2
  45.      
  46. #define MAX_ARP 3
  47.      
  48. /* there is no note in each channel initially.
  49.  * This is defensive programming, because some
  50.  * commands rely on the previous note. Checking
  51.  * that there was no previous note is a way to
  52.  * detect faulty modules.
  53.  */
  54. #define NO_NOTE 255
  55.  
  56. struct channel
  57.     {
  58.     struct sample_info *samp;
  59.     int mode;               /* automaton state for the sound generatio */
  60.     unsigned int pointer;   /* current sample position (fixed pos) */
  61.     unsigned int step;      /* sample position increment (gives pitch) */
  62.     int volume;             /* current volume of the sample (0-64) */
  63.     int pitch;              /* current pitch of the sample */
  64.     int note;               /* we have to save the note cause */
  65.                             /* we can do an arpeggio without a new note */
  66.     
  67.     int arp[MAX_ARP];       /* the three pitch values for an arpeggio */
  68.     int arpindex;           /* an index to know which note the arpeggio is doing
  69.                              */
  70.  
  71.     int viboffset;          /* current offset for vibrato (if any) */
  72.     int vibdepth;           /* depth of vibrato (if any) */
  73.  
  74.     int slide;              /* step size of pitch slide */
  75.  
  76.     int pitchgoal;          /* pitch to slide to */
  77.     int pitchrate;          /* step rate for portamento */
  78.  
  79.     int volumerate;         /* step rate for volume slide */
  80.  
  81.     int vibrate;            /* step rate for vibrato */
  82.     void (*adjust)();       /* current command to adjust parameters */
  83.     };
  84.  
  85. /* DO_NOTHING was already declared for the channel
  86.    #define DO_NOTHING 0 */
  87. #define SET_SPEED 1
  88. #define SET_SKIP 2
  89. #define SET_FASTSKIP 4
  90.  
  91. #define NORMAL_SPEED 6
  92. #define NORMAL_FINESPEED 100
  93.  
  94. struct automaton
  95.     {
  96.     int pattern_num;            /* the pattern in the song */
  97.     int note_num;               /* the note in the pattern */
  98.     struct block *pattern;      /* the physical pattern */
  99.     struct song_info *info;     /* we need the song_info */
  100.  
  101.     int counter;                /* the fine position inside the effect */
  102.     int speed;                  /* the `speed', number of effect repeats */
  103.     int finespeed;              /* the finespeed, base is 100 */
  104.  
  105.     int do_stuff;               /* keeping some stuff to do */
  106.                                 /* ... and parameters for it: */
  107.     int new_speed, new_note, new_pattern, new_fastspeed;
  108.  
  109.     int pitch, note, para;      /* some extra parameters effects need */
  110.     };
  111.