1 #include "mpeg3private.h"
2 #include "mpeg3protos.h"
5 #define WRITE_SAMPLE(samples, sum) \
10 int mpeg3audio_synth_stereo(mpeg3_layer_t
*audio
,
16 float *samples
= out
+ *pnt
;
18 float *b0
, (*buf
)[0x110];
25 buf
= audio
->synth_stereo_buffs
[0];
29 buf
= audio
->synth_stereo_buffs
[1];
36 mpeg3audio_dct64(buf
[1] + ((audio
->bo
+ 1) & 0xf), buf
[0] + audio
->bo
, bandPtr
);
42 mpeg3audio_dct64(buf
[0] + audio
->bo
, buf
[1] + audio
->bo
+ 1, bandPtr
);
45 /*printf("%f %f %f\n", buf[0][0], buf[1][0], bandPtr[0]); */
49 float *window
= mpeg3_decwin
+ 16 - bo1
;
51 for(j
= 16; j
; j
--, b0
+= 0x10, window
+= 0x20, samples
++)
53 sum
= window
[0x0] * b0
[0x0];
54 sum
-= window
[0x1] * b0
[0x1];
55 sum
+= window
[0x2] * b0
[0x2];
56 sum
-= window
[0x3] * b0
[0x3];
57 sum
+= window
[0x4] * b0
[0x4];
58 sum
-= window
[0x5] * b0
[0x5];
59 sum
+= window
[0x6] * b0
[0x6];
60 sum
-= window
[0x7] * b0
[0x7];
61 sum
+= window
[0x8] * b0
[0x8];
62 sum
-= window
[0x9] * b0
[0x9];
63 sum
+= window
[0xA] * b0
[0xA];
64 sum
-= window
[0xB] * b0
[0xB];
65 sum
+= window
[0xC] * b0
[0xC];
66 sum
-= window
[0xD] * b0
[0xD];
67 sum
+= window
[0xE] * b0
[0xE];
68 sum
-= window
[0xF] * b0
[0xF];
70 WRITE_SAMPLE(samples
, sum
);
73 sum
= window
[0x0] * b0
[0x0];
74 sum
+= window
[0x2] * b0
[0x2];
75 sum
+= window
[0x4] * b0
[0x4];
76 sum
+= window
[0x6] * b0
[0x6];
77 sum
+= window
[0x8] * b0
[0x8];
78 sum
+= window
[0xA] * b0
[0xA];
79 sum
+= window
[0xC] * b0
[0xC];
80 sum
+= window
[0xE] * b0
[0xE];
81 WRITE_SAMPLE(samples
, sum
);
87 for(j
= 15; j
; j
--, b0
-= 0x10, window
-= 0x20, samples
++)
89 sum
= -window
[-0x1] * b0
[0x0];
90 sum
-= window
[-0x2] * b0
[0x1];
91 sum
-= window
[-0x3] * b0
[0x2];
92 sum
-= window
[-0x4] * b0
[0x3];
93 sum
-= window
[-0x5] * b0
[0x4];
94 sum
-= window
[-0x6] * b0
[0x5];
95 sum
-= window
[-0x7] * b0
[0x6];
96 sum
-= window
[-0x8] * b0
[0x7];
97 sum
-= window
[-0x9] * b0
[0x8];
98 sum
-= window
[-0xA] * b0
[0x9];
99 sum
-= window
[-0xB] * b0
[0xA];
100 sum
-= window
[-0xC] * b0
[0xB];
101 sum
-= window
[-0xD] * b0
[0xC];
102 sum
-= window
[-0xE] * b0
[0xD];
103 sum
-= window
[-0xF] * b0
[0xE];
104 sum
-= window
[-0x0] * b0
[0xF];
106 WRITE_SAMPLE(samples
, sum
);
116 /* Call this after every seek to reset the buffers */
117 int mpeg3audio_reset_synths(mpeg3_layer_t
*audio
)
120 for(i
= 0; i
< 2; i
++)
122 for(j
= 0; j
< 2; j
++)
124 for(k
= 0; k
< 0x110; k
++)
126 audio
->synth_stereo_buffs
[i
][j
][k
] = 0;
130 for(i
= 0; i
< 64; i
++)
132 audio
->synth_mono_buff
[i
] = 0;
133 audio
->layer2_scfsi_buf
[i
] = 0;
135 for(i
= 0; i
< 2; i
++)
137 for(j
= 0; j
< 2; j
++)
139 for(k
= 0; k
< SBLIMIT
* SSLIMIT
; k
++)
141 audio
->mp3_block
[i
][j
][k
] = 0;
145 audio
->mp3_blc
[0] = 0;
146 audio
->mp3_blc
[1] = 0;