mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-16 17:32:13 +00:00
79 lines
2.4 KiB
C
79 lines
2.4 KiB
C
|
#ifndef LIBXMP_MIXER_H
|
||
|
#define LIBXMP_MIXER_H
|
||
|
|
||
|
#define C4_PERIOD 428.0
|
||
|
|
||
|
#define SMIX_NUMVOC 128 /* default number of softmixer voices */
|
||
|
#define SMIX_SHIFT 16
|
||
|
#define SMIX_MASK 0xffff
|
||
|
|
||
|
#define FILTER_SHIFT 16
|
||
|
#define ANTICLICK_SHIFT 3
|
||
|
|
||
|
#ifdef LIBXMP_PAULA_SIMULATOR
|
||
|
#include "paula.h"
|
||
|
#endif
|
||
|
|
||
|
#define MIXER(f) void libxmp_mix_##f(struct mixer_voice *vi, int *buffer, \
|
||
|
int count, int vl, int vr, int step, int ramp, int delta_l, int delta_r)
|
||
|
|
||
|
struct mixer_voice {
|
||
|
int chn; /* channel number */
|
||
|
int root; /* */
|
||
|
int note; /* */
|
||
|
#define PAN_SURROUND 0x8000
|
||
|
int pan; /* */
|
||
|
int vol; /* */
|
||
|
double period; /* current period */
|
||
|
double pos; /* position in sample */
|
||
|
int pos0; /* position in sample before mixing */
|
||
|
int fidx; /* mixer function index */
|
||
|
int ins; /* instrument number */
|
||
|
int smp; /* sample number */
|
||
|
int end; /* loop end */
|
||
|
int act; /* nna info & status of voice */
|
||
|
int old_vl; /* previous volume, left channel */
|
||
|
int old_vr; /* previous volume, right channel */
|
||
|
int sleft; /* last left sample output, in 32bit */
|
||
|
int sright; /* last right sample output, in 32bit */
|
||
|
#define VOICE_RELEASE (1 << 0)
|
||
|
#define ANTICLICK (1 << 1)
|
||
|
#define SAMPLE_LOOP (1 << 2)
|
||
|
int flags; /* flags */
|
||
|
void *sptr; /* sample pointer */
|
||
|
#ifdef LIBXMP_PAULA_SIMULATOR
|
||
|
struct paula_state *paula; /* paula simulation state */
|
||
|
#endif
|
||
|
|
||
|
#ifndef LIBXMP_CORE_DISABLE_IT
|
||
|
struct {
|
||
|
int r1; /* filter variables */
|
||
|
int r2;
|
||
|
int l1;
|
||
|
int l2;
|
||
|
int a0;
|
||
|
int b0;
|
||
|
int b1;
|
||
|
int cutoff;
|
||
|
int resonance;
|
||
|
} filter;
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
int libxmp_mixer_on (struct context_data *, int, int, int);
|
||
|
void libxmp_mixer_off (struct context_data *);
|
||
|
void libxmp_mixer_setvol (struct context_data *, int, int);
|
||
|
void libxmp_mixer_seteffect (struct context_data *, int, int, int);
|
||
|
void libxmp_mixer_setpan (struct context_data *, int, int);
|
||
|
int libxmp_mixer_numvoices (struct context_data *, int);
|
||
|
void libxmp_mixer_softmixer (struct context_data *);
|
||
|
void libxmp_mixer_reset (struct context_data *);
|
||
|
void libxmp_mixer_setpatch (struct context_data *, int, int, int);
|
||
|
void libxmp_mixer_voicepos (struct context_data *, int, double, int);
|
||
|
double libxmp_mixer_getvoicepos(struct context_data *, int);
|
||
|
void libxmp_mixer_setnote (struct context_data *, int, int);
|
||
|
void libxmp_mixer_setperiod (struct context_data *, int, double);
|
||
|
void libxmp_mixer_release (struct context_data *, int, int);
|
||
|
|
||
|
#endif /* LIBXMP_MIXER_H */
|