This is TrackerPlayerPrivate.h in view mode; [Download] [Up]
/* TrackerPlayerPrivate.h */ /* Generated by myself! */ /* DO_NOTHING is also used for the automaton */ #define DO_NOTHING 0 #define PLAY 1 #define REPLAY 2 #define MAX_ARP 3 /* there is no note in each channel initially. * This is defensive programming, because some * commands rely on the previous note. Checking * that there was no previous note is a way to * detect faulty modules. */ #define NO_NOTE 255 struct channel { struct sample_info *samp; int mode; /* automaton state for the sound generatio */ unsigned int pointer; /* current sample position (fixed pos) */ unsigned int step; /* sample position increment (gives pitch) */ int volume; /* current volume of the sample (0-64) */ int pitch; /* current pitch of the sample */ int note; /* we have to save the note cause */ /* we can do an arpeggio without a new note */ int arp[MAX_ARP]; /* the three pitch values for an arpeggio */ int arpindex; /* an index to know which note the arpeggio is doing */ int viboffset; /* current offset for vibrato (if any) */ int vibdepth; /* depth of vibrato (if any) */ int slide; /* step size of pitch slide */ int pitchgoal; /* pitch to slide to */ int pitchrate; /* step rate for portamento */ int volumerate; /* step rate for volume slide */ int vibrate; /* step rate for vibrato */ void (*adjust)(); /* current command to adjust parameters */ }; #define SET_SPEED 1 #define SET_SKIP 2 #define SET_FASTSKIP 4 #define NORMAL_SPEED 6 #define NORMAL_FINESPEED 100 struct automaton { int pattern_num; /* the pattern in the song */ int note_num; /* the note in the pattern */ struct block *pattern; /* the physical pattern */ struct song_info *info; /* we need the song_info */ int counter; /* the fine position inside the effect */ int speed; /* the `speed', number of effect repeats */ int finespeed; /* the finespeed, base is 100 */ int do_stuff; /* keeping some stuff to do */ /* ... and parameters for it: */ int new_speed, new_note, new_pattern, new_fastspeed; int pitch, note, para; /* some extra parameters effects need */ }; // extern.h: /* error types. Everything is centralized, * and we check in some places (see read, player and str32) * that there was no error. Additionnally signal traps work * that way too. */ #define NONE 0 /* normal state */ #define FILE_TOO_SHORT 1 /* read error */ #define CORRUPT_FILE 2 #define NEXT_SONG 3 /* trap error: goto next song right now */ #define FAULT 4 /* run time problem */ #define ENDED 5 /* the song has ended */ #define UNRECOVERABLE 6 /* unrecoverable problem: typically */ #define SAMPLE_FAULT 7 /* Missing sample. Very common error */ #define SUSPEND_SONG 8 #define ACCURACY 16 #define fix_to_int(x) ((x) >> ACCURACY) #define int_to_fix(x) ((x) << ACCURACY) /* some definitions for being able to read song.h */ #define OLD 0 #define NEW 1 #define BOTH 2 /* try both formats */ #define NEW_NO_CHECK 3 /* Assume new format without checking */ #define NUMBER_NOTES 120 #define neuMIN(A,B) ((A)<(B) ? (A) : (B)) #define neuMAX(A,B) ((A)>(B) ? (A) : (B)) #define D fprintf(stderr, "%d\n", __LINE__); #define HZ 8000 typedef signed char SAMPLE; struct pref { int type, speed, tolerate, repeats; }; // song.h #define NUMBER_SAMPLES 32 #define BLOCK_LENGTH 64 #define NUMBER_TRACKS 4 #define NUMBER_PATTERNS 128 #define NUMBER_EFFECTS 16 #define MIN_PITCH 113 #define MAX_PITCH 1023 #define MIN_VOLUME 0 #define MAX_VOLUME 64 /* the fuzz in note pitch */ #define FUZZ 2 /* we refuse to allocate more than 500000 bytes for one sample */ #define MAX_SAMPLE_LENGTH 500000 struct sample_info { char *name; int length, rp_offset, rp_length; int volume; int finetune; SAMPLE *start, *rp_start; }; /* the actual parameters may be split in two halves occasionnally */ #define LOW(para) ((para) & 15) #define HI(para) ((para) >> 4) struct event { unsigned char sample_number; unsigned char effect; unsigned char parameters; unsigned char note; int pitch; }; struct block { struct event e[NUMBER_TRACKS][BLOCK_LENGTH]; }; struct song_info { int length; int maxpat; char patnumber[NUMBER_PATTERNS]; struct block *pblocks; }; struct song { char *title; /* sample 0 is always a dummy sample */ struct sample_info *samples[NUMBER_SAMPLES]; struct song_info *info; }; /* Prototypes */ // audio.c void create_step_table(int oversample); void create_notes_table(void); void init_tables(int oversample); void resample(struct channel *chan, int oversample, int number); void reset_note(struct channel *ch, int note, int pitch); void set_current_pitch(struct channel *ch, int pitch); // automaton.c void set_pattern(struct automaton *a); void init_automaton(struct automaton *a, struct song *song); void advance_pattern(struct automaton *a); void next_tick(struct automaton *a); // commands.c void do_nothing(struct channel *ch); void set_nothing(struct automaton *a, struct channel *ch); void do_slide(struct channel *ch); void set_upslide(struct automaton *a, struct channel *ch); void set_downslide(struct automaton *a, struct channel *ch); void do_vibrato(struct channel *ch); void set_vibrato(struct automaton *a, struct channel *ch); void do_arpeggio(struct channel *ch); void set_arpeggio(struct automaton *a, struct channel *ch); void do_slidevol(struct channel *ch); void parse_slidevol(struct channel *ch, int para); void set_slidevol(struct automaton *a, struct channel *ch); void do_portamento(struct channel *ch); void set_portamento(struct automaton *a, struct channel *ch); void do_portaslide(struct channel *ch); void set_portaslide(struct automaton *a, struct channel *ch); void do_vibratoslide(struct channel *ch); void set_vibratoslide(struct automaton *a, struct channel *ch); void set_speed(struct automaton *a, struct channel *ch); void set_skip(struct automaton *a, struct channel *ch); void set_fastskip(struct automaton *a, struct channel *ch); void set_offset(struct automaton *a, struct channel *ch); void set_volume(struct automaton *a, struct channel *ch); void init_effects(void (*table[])()); // player.c void init_channel(struct channel *ch, struct sample_info *dummy); void init_player(int o, int f); void setup_effect(struct channel *ch, struct automaton *a, struct event *e); void play_song(struct song *song, struct pref *pref, int oversample); // read.c int find_note(int pitch); int checkgetc(void); char *getstring(int len); void byteskip(int len); int getushort(void); void fill_sample_info(struct sample_info *info); void fill_song_info(struct song_info *info); void fill_event(struct event *e); void fill_pattern(struct block *pattern); void read_sample(struct sample_info *info); struct song *new_song(void); struct sample_info *new_sample_info(void); struct song_info *new_song_info(void); void release_song(struct song *song); struct song *error_song(struct song *song); int bad_sig(void); struct song *read_song(int type, int tr); // str32.c void module_abspielen(char *buffer); // next_audio.c int open_audio(TrackerPlayer *); void set_mix(int percent); void output_samples(int left, int right, char last_sample); void flush_buffer(int really_flush); void close_audio(void);
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.