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_dgram = FALSE;
00011 PRIVATE FLOAT g_out[LPC10_DOUTMAX];
00012 PRIVATE INT16 g_out_i16[LPC10_DOUTMAX];
00013
00014
00015
00016 DLPC10_DGRAM *dlpc10_dgram_construct( VOID )
00017 {
00018 if (g_used_d_dgram) {
00019 fprintf(stderr,"\nPor ahora no soporto mas de una estructura DLPC10_DGRAM!\7\n");
00020 exit(1);
00021 }
00022
00023 g_used_d_dgram = TRUE;
00024
00025 dlpc10_dgram_reset((DLPC10_DGRAM*)1);
00026 return (DLPC10_DGRAM*)1;
00027 }
00028
00029
00030
00031 VOID dlpc10_dgram_destruct( DLPC10_DGRAM *d )
00032 {
00033 (void)d;
00034 g_used_d_dgram = FALSE;
00035 }
00036
00037
00038
00039 VOID dlpc10_dgram_reset( DLPC10_DGRAM *d )
00040 {
00041 (void)d;
00042 decoder_ini();
00043 recv_dgram_ini();
00044 }
00045
00046
00047
00048 FLOAT *dlpc10_dgram_outvec( DLPC10_DGRAM *d )
00049 {
00050 (void)d;
00051 return g_out;
00052 }
00053
00054
00055
00056 INT16 *dlpc10_dgram_outvec_i16( DLPC10_DGRAM *d )
00057 {
00058 (void)d;
00059 return g_out_i16;
00060 }
00061
00062
00063
00064 INT dlpc10_dgram_decode( DLPC10_DGRAM *d, LPC10_dgram_data *dgram )
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_dgram(*dgram,voice,&pitch,&rms,rc);
00074 synths(voice, pitch, rms, rc, g_out, &len);
00075
00076 return len;
00077 }
00078
00079
00080
00081 INT dlpc10_dgram_decode_i16( DLPC10_DGRAM *d, LPC10_dgram_data *dgram )
00082 {
00083 INDEX len;
00084 INT i;
00085
00086 len = dlpc10_dgram_decode(d,dgram);
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