Subversion Repositories eduke32

Rev

Rev 6158 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#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 */
        int slen;               /* sample length */
        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 */