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 */