Mercurial > audlegacy-plugins
diff src/timidity/libtimidity/timidity_internal.h @ 12:3da1b8942b8b trunk
[svn] - remove src/Input src/Output src/Effect src/General src/Visualization src/Container
| author | nenolod |
|---|---|
| date | Mon, 18 Sep 2006 03:14:20 -0700 |
| parents | src/Input/timidity/libtimidity/timidity_internal.h@13389e613d67 |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/timidity/libtimidity/timidity_internal.h Mon Sep 18 03:14:20 2006 -0700 @@ -0,0 +1,192 @@ +#ifndef TIMIDITY_INTERNAL_H +#define TIMIDITY_INTERNAL_H + +#include "timidity.h" + +#if defined(__i386__) || defined(__ia64__) || defined(WIN32) || \ + (defined(__alpha__) || defined(__alpha)) || \ + defined(__arm__) || \ + (defined(__mips__) && defined(__MIPSEL__)) || \ + defined(__SYMBIAN32__) || \ + defined(__x86_64__) || \ + defined(__LITTLE_ENDIAN__) +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN +#endif +#undef BIG_ENDIAN +#else +#ifndef BIG_ENDIAN +#define BIG_ENDIAN +#endif +#undef LITTLE_ENDIAN +#endif + +/* Instrument files are little-endian, MIDI files big-endian, so we + need to do some conversions. */ + +#define XCHG_SHORT(x) ((((x)&0xFF)<<8) | (((x)>>8)&0xFF)) +#ifdef __i486__ +# define XCHG_LONG(x) \ + ({ sint32 __value; \ + asm ("bswap %1; movl %1,%0" : "=g" (__value) : "r" (x)); \ + __value; }) +#else +# define XCHG_LONG(x) ((((x)&0xFF)<<24) | \ + (((x)&0xFF00)<<8) | \ + (((x)&0xFF0000)>>8) | \ + (((x)>>24)&0xFF)) +#endif + +#ifdef LITTLE_ENDIAN +#define SWAPLE16(x) x +#define SWAPLE32(x) x +#define SWAPBE16(x) XCHG_SHORT(x) +#define SWAPBE32(x) XCHG_LONG(x) +#else +#define SWAPBE16(x) x +#define SWAPBE32(x) x +#define SWAPLE16(x) XCHG_SHORT(x) +#define SWAPLE32(x) XCHG_LONG(x) +#endif + +#ifdef DEBUG +#define DEBUG_MSG(...) fprintf(stderr, __VA_ARGS__) +#else +#define DEBUG_MSG(...) +#endif + + +#define MID_VIBRATO_SAMPLE_INCREMENTS 32 + +/* Maximum polyphony. */ +#define MID_MAX_VOICES 48 + +typedef sint16 sample_t; +typedef sint32 final_volume_t; + +typedef struct _MidSample MidSample; +struct _MidSample +{ + sint32 + loop_start, loop_end, data_length, + sample_rate, low_vel, high_vel, low_freq, high_freq, root_freq; + sint32 envelope_rate[6], envelope_offset[6]; + float volume; + sample_t *data; + sint32 + tremolo_sweep_increment, tremolo_phase_increment, + vibrato_sweep_increment, vibrato_control_ratio; + uint8 tremolo_depth, vibrato_depth, modes; + sint8 panning, note_to_use; +}; + +typedef struct _MidChannel MidChannel; +struct _MidChannel +{ + int bank, program, volume, sustain, panning, pitchbend, expression; + int mono; /* one note only on this channel -- not implemented yet */ + int pitchsens; + /* chorus, reverb... Coming soon to a 300-MHz, eight-way superscalar + processor near you */ + float pitchfactor; /* precomputed pitch bend factor to save some fdiv's */ +}; + +typedef struct _MidVoice MidVoice; +struct _MidVoice +{ + uint8 status, channel, note, velocity; + MidSample *sample; + sint32 + orig_frequency, frequency, + sample_offset, sample_increment, + envelope_volume, envelope_target, envelope_increment, + tremolo_sweep, tremolo_sweep_position, + tremolo_phase, tremolo_phase_increment, + vibrato_sweep, vibrato_sweep_position; + + final_volume_t left_mix, right_mix; + + float left_amp, right_amp, tremolo_volume; + sint32 vibrato_sample_increment[MID_VIBRATO_SAMPLE_INCREMENTS]; + int + vibrato_phase, vibrato_control_ratio, vibrato_control_counter, + envelope_stage, control_counter, panning, panned; + +}; + +typedef struct _MidInstrument MidInstrument; +struct _MidInstrument +{ + int samples; + MidSample *sample; +}; + +typedef struct _MidToneBankElement MidToneBankElement; +struct _MidToneBankElement +{ + char *name; + int note, amp, pan, strip_loop, strip_envelope, strip_tail; +}; + +typedef struct _MidToneBank MidToneBank; +struct _MidToneBank +{ + MidToneBankElement *tone; + MidInstrument *instrument[128]; +}; + +typedef struct _MidEvent MidEvent; +struct _MidEvent +{ + sint32 time; + uint8 channel, type, a, b; +}; + +typedef struct _MidEventList MidEventList; +struct _MidEventList +{ + MidEvent event; + void *next; +}; + +struct _MidSong +{ + int playing; + sint32 rate; + sint32 encoding; + int bytes_per_sample; + float master_volume; + sint32 amplification; + MidDLSPatches *patches; + MidToneBank *tonebank[128]; + MidToneBank *drumset[128]; + MidInstrument *default_instrument; + int default_program; + void (*write) (void *dp, sint32 * lp, sint32 c); + int buffer_size; + sample_t *resample_buffer; + sint32 *common_buffer; + /* These would both fit into 32 bits, but they are often added in + large multiples, so it's simpler to have two roomy ints */ + /* samples per MIDI delta-t */ + sint32 sample_increment; + sint32 sample_correction; + MidChannel channel[16]; + MidVoice voice[MID_MAX_VOICES]; + int voices; + sint32 drumchannels; + sint32 control_ratio; + sint32 lost_notes; + sint32 cut_notes; + sint32 samples; + MidEvent *events; + MidEvent *current_event; + MidEventList *evlist; + sint32 current_sample; + sint32 event_count; + sint32 at; + sint32 groomed_event_count; + char *meta_data[8]; +}; + +#endif /* TIMIDITY_INTERNAL_H */
