/* player.h */ /* data structure for the song, and such */ /* $Author: Espie $ * $Date: 91/05/20 22:44:10 $ * $Revision: 1.21 $ * $Log: player.h,v $ * Revision 1.21 91/05/20 22:44:10 Espie * *** empty log message *** * * Revision 1.20 91/05/12 16:01:27 Espie * *** empty log message *** * * Revision 1.19 91/05/06 15:14:30 Espie * *** empty log message *** * * Revision 1.18 91/05/05 19:06:04 Espie * Added some new private fields. * * Revision 1.17 91/05/05 15:38:42 Espie * Augmented private structure, still searching its self. * * Revision 1.16 91/05/02 01:29:08 Espie * Needs some more simplification. * * Revision 1.15 91/04/30 00:35:30 Espie * Stable version III. * * Revision 1.14 91/04/29 15:06:13 Espie * No real modification this time. * * Revision 1.13 91/04/28 22:53:18 Espie * tranpose added. * * Revision 1.12 91/04/28 20:36:29 Espie * New fields for finespeed. * Plus timerbase/effectbase. * * Revision 1.11 91/04/27 20:49:31 Espie * New t * timing speed. * * Revision 1.10 91/04/27 16:43:39 Espie * Added some new fields, and some comments. * Beginning the cleanup of that structure. * * Revision 1.9 91/04/27 03:59:55 Espie * New fields, needs some editing anyway. * ---> specify an interface for the player. * * Revision 1.8 91/04/27 00:24:20 Espie * See player.c, interrupt.c (new state variable, switch to a function variable, * i.e., case folding). * * Revision 1.7 91/04/26 16:31:30 Espie * New fields for timing management, not yet perfect. * * Revision 1.6 91/04/23 21:29:37 Espie * Some new commands for in the player * * Revision 1.5 91/04/21 20:05:29 Espie * Notes added. * * Revision 1.4 91/04/21 12:11:52 Espie * Stable version, known as bunch II. * Also features ``right'' log description. * * Revision 1.3 91/04/20 18:12:54 Espie * * Revision 1.2 91/04/19 13:20:08 Espie * New control structure for signalling tasks. * * Revision 1.1 91/04/19 02:20:36 Espie * Initial revision * */ #include "periods.h" #define NUMBER_TRACKS 4 #define NUMBER_COMMANDS 16 #define LENGTH_SINE 32 typedef void (*COMMAND)(struct play *play, struct automaton *cst); struct automaton { COMMAND pursue; /* what to do to continue the current note */ struct sample_info *instr; /* the current sample */ int period; /* the current period */ int pergoal; /* the period to achieve */ int volume; /* the current volume */ int rate; /* parameters for effects, and fold values */ int offset; /* could use an union there... */ int depth; int speed; UWORD *p_table; UBYTE channel, note; UBYTE arp1, arp2; BOOL newnote; /* have we played a new note (must set up replay) */ }; struct priv_play { void (*state)(struct play *play); int volume; BOOL filter; struct automaton *track[NUMBER_TRACKS]; /* sine table for vibrato command */ BYTE *sine_table; COMMAND *setup; /* periods.c value */ UWORD **period_table; UBYTE *channel_mask; struct block *block; /* the particular event we're processing */ struct event *e; UBYTE counter, speed; UWORD finespeed; BOOL replay, tempo_change, has_ended; /* used for the change patterns command * (code: -1 ==> nothing. * else pattern, or position) */ BYTE skip, fastskip; /* used for the change speed command * code: -1 ==> nothing. */ WORD newspeed; volatile UBYTE *latchlo, *latchhi; volatile UBYTE *control; /* the timing values are finally private */ UWORD maintimer, smalltimer, effecttimer; /* measures the time already spent, for restarting dma after a delay, * which relatch normally does not provide. */ int spent; /* the last value we put into the latch, * the current elapsed time since last timer restart. */ int latched, current; /* some values we keep a private copy of */ UBYTE pattern, position; /* audio_hard values */ ULONG mask; UBYTE saved_filter; };