# [Ffmpeg-devel] AAC decoder

Daniel Serpell daniel_serpell
Wed Mar 22 01:23:10 CET 2006

```Hi!

At Tue, Mar 21, 2006, Mike Melanson wrote:
>
> I decided to put my code where my mouth is. What follows is a
> program to generate the sine tables, and also validates them against the
> tables in your aac.h file. This will eliminate the hard-coding of
> sine_long_1024[] and sine_short_128[]. I will see if I can figure out an
> algorithm for the KBD stuff as well.
>

Here you have a better version without sin/cos functions (should
be a lot faster, if it matters):

-------------------------------------------------------------------
#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
int i;
const double sinA = 0.00153398018628476561230369715026407907995;
const double cosA = 0.99999882345170190992902571017152601904827;
double x = 0.00076699031874270452693856835794857664314;
double y = 0.99999970586288221916022821773876567711626;

for (i = 0; i < 1024; i++) {
float sinTrue = sin((i * 2 + 1) * M_PI / 4096);
float sinIter = x;
double nx = x * cosA + y * sinA;
double ny = - x * sinA + y * cosA;
x = nx;
y = ny;
if ( fabs(sinTrue - sinIter) > 0.00000000001)
printf ("%d: calculated = %f, original = %f\n", i,
sinIter, sinTrue);
}

return 0;
}
-------------------------------------------------------------------

Also, if you don't want doubles, you can use (with lower
precision):

-------------------------------------------------------------------
#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
int i;
const long long sinA = 6588396LL;
const long long cosA = 4294962244LL;
int x = 1647006;
int y = 2147483010;

for (i = 0; i < 1024; i++) {
float sinTrue = sin((i * 2 + 1) * M_PI / 4096);
float sinIter = x * 0.0000000004656612873077392578125;
int nx = (int)((x * cosA + y * sinA)>>32);
int ny = (int)((-x * sinA + y * cosA)>>32);
x = nx;
y = ny;
if ( fabs(sinTrue - sinIter) > 0.0000001)
printf ("%d: calculated = %.9f, original = %.9f \n", i,
sinIter, sinTrue);
}

return 0;
}
-------------------------------------------------------------------

Daniel.

```