00001 #include <stdio.h>
00002 #include <stdlib.h>
00003
00004 #include "lpc10.h"
00005 #include "d_lpc10.h"
00006 #include "sr_lpc10.h"
00007
00008
00009
00010 PRIVATE BOOL g_used_d_2400 = FALSE;
00011 PRIVATE FLOAT g_out[LPC10_DOUTMAX];
00012 PRIVATE INT16 g_out_i16[LPC10_DOUTMAX];
00013
00014
00015
00016 DLPC10_2400 *dlpc10_2400_construct( VOID )
00017 {
00018 if (g_used_d_2400) {
00019 fprintf(stderr,"\nPor ahora no soporto mas de una estructura DLPC10_2400!\7\n");
00020 exit(1);
00021 }
00022
00023 g_used_d_2400 = TRUE;
00024
00025 dlpc10_2400_reset((DLPC10_2400*)1);
00026 return (DLPC10_2400*)1;
00027 }
00028
00029
00030
00031 VOID dlpc10_2400_destruct( DLPC10_2400 *d )
00032 {
00033 (void)d;
00034 g_used_d_2400 = FALSE;
00035 }
00036
00037
00038
00039 VOID dlpc10_2400_reset( DLPC10_2400 *d )
00040 {
00041 (void)d;
00042 decoder_ini();
00043 recv_2400_ini();
00044 }
00045
00046
00047
00048 FLOAT *dlpc10_2400_outvec( DLPC10_2400 *d )
00049 {
00050 (void)d;
00051 return g_out;
00052 }
00053
00054
00055
00056 INT16 *dlpc10_2400_outvec_i16( DLPC10_2400 *d )
00057 {
00058 (void)d;
00059 return g_out_i16;
00060 }
00061
00062
00063
00064 INT dlpc10_2400_idecode( DLPC10_2400 *d, LPC10_2400_idata *bits )
00065 {
00066 INDEX len;
00067 INT pitch;
00068 FLOAT rms;
00069 FLOAT rc[LPC10_ORDER];
00070 BOOL voice[2];
00071
00072 (void)d;
00073 recv_2400_i(*bits,voice,&pitch,&rms,rc);
00074 synths(voice, pitch, rms, rc, g_out, &len);
00075
00076 return len;
00077 }
00078
00079
00080
00081 INT dlpc10_2400_idecode_i16( DLPC10_2400 *d, LPC10_2400_idata *bits )
00082 {
00083 INDEX len;
00084 INT i;
00085
00086 len = dlpc10_2400_idecode(d,bits);
00087
00088 for (i=0; i<len; i++)
00089 g_out_i16[i] = (INT16)(MMAX(-32768., MMIN(32768. * g_out[i], 32767.)));
00090
00091 return len;
00092 }
00093
00094
00095
00096 VOID dlpc10_2400_unpack( LPC10_2400_data *in, LPC10_2400_idata *o)
00097 {
00098 INDEX i,j,n;
00099
00100 for (i=0; i<7; i++) {
00101 for (j=0; j<8; j++) {
00102 n=i*8+j;
00103 if (n>=(INDEX)sizeof(LPC10_2400_idata)) break;
00104 (*o)[n] = ((*in)[i] & (1<<(7-j)))?1:0;
00105 }
00106 }
00107 }
00108
00109