File: dwmixfa.h

package info (click to toggle)
ocp 1%3A0.1.21-1.1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 5,344 kB
  • ctags: 7,862
  • sloc: ansic: 91,449; cpp: 9,729; sh: 3,119; makefile: 2,482
file content (92 lines) | stat: -rw-r--r-- 2,999 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#define MIXF_MIXBUFLEN 4096
#define MIXF_MAXCHAN 255

//#define MIXF_PLAYSTEREO 0     Floating point mixer doesn't support stereo samples, only mono to stereo output
#define MIXF_INTERPOLATE 2
#define MIXF_INTERPOLATEQ 4
#define MIXF_FILTER 8
#define MIXF_QUIET 16
#define MIXF_LOOPED 32

#define MIXF_PLAYING 256
#define MIXF_MUTE 512

#define MIXF_UNSIGNED 1
#define MIXF_16BITOUT 2

#define MIXF_VOLRAMP  256
#define MIXF_DECLICK  512

extern void mixer (void);
extern void prepare_mixer (void);
extern void getchanvol (int n, int len);

#define MAXVOICES MIXF_MAXCHAN

typedef struct
{
	float    *tempbuf;         /* ptr to 32 bit temp-buffer */
	void     *outbuf;          /* ptr to 16 bit mono-buffer */
	uint32_t  nsamples;        /* # of samples to generate */
	uint32_t  nvoices;         /* # of voices */

	uint32_t  freqw[MIXF_MAXCHAN]; /* frequency (whole part) */
	uint32_t  freqf[MIXF_MAXCHAN]; /* frequency (fractional part) */

	float    *smpposw[MIXF_MAXCHAN]; /* sample position (whole part (pointer!)) */
	uint32_t  smpposf[MIXF_MAXCHAN]; /* sample position (fractional part) */

	float    *loopend[MIXF_MAXCHAN]; /* pointer to loop end */
	uint32_t  looplen[MIXF_MAXCHAN]; /* loop length in samples */

	float   volleft[MIXF_MAXCHAN];   /* float: left volume (1.0=normal) */
	float   volright[MIXF_MAXCHAN];  /* float: right volume (1.0=normal) */
	float   rampleft[MIXF_MAXCHAN];  /* float: left volramp (dvol/sample) */
	float   rampright[MIXF_MAXCHAN]; /* float: right volramp (dvol/sample) */

	uint32_t voiceflags[MIXF_MAXCHAN]; /* voice status flags */

	float   ffreq[MIXF_MAXCHAN]; /* filter frequency (0<=x<=1) */
	float   freso[MIXF_MAXCHAN]; /* filter resonance (0<=x<1) */

	float   fadeleft,faderight; /* temp holding register - TODO, check if they should be local for channel */

	float   fl1[MIXF_MAXCHAN]; /* filter lp buffer */
	float   fb1[MIXF_MAXCHAN]; /* filter bp buffer */

	int     isstereo;   /* flag for stereo output */
	int     outfmt;     /* output format */
	float   voll, volr; /* output volume */

	float   ct0[256]; /* interpolation tab for s[-1] */
	float   ct1[256]; /* interpolation tab for s[0] */
	float   ct2[256]; /* interpolation tab for s[1] */
	float   ct3[256]; /* interpolation tab for s[2] */

	uint32_t samprate;

	struct mixfpostprocregstruct *postprocs; /* TODO */

	/* private to mixer, used be dwmixfa_8087.c */
	float volrl; /* volume current left */
	float volrr; /* volume current right */
	uint16_t clipval;    /* used in clippers in order to transfer into register */
	uint32_t mixlooplen; /* lenght of loop in samples*/
	uint32_t looptype;  /* local version of voiceflags[N] */
	float magic1;  /* internal dumping variable for filters */
	float ffrq;
	float frez;
	float __fl1;
	float __fb1;
} dwmixfa_state_t;

extern dwmixfa_state_t dwmixfa_state;



#ifdef I386_ASM

extern void start_dwmixfa(void);   /* these two are used to calculate memory remapping (self modifying code) */
extern void stop_dwmixfa(void);

#endif