00001 #include "sr_lpc10.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 static INDEX G_enadd[10] = {
00022 0, 0, -1152, 2816, 1536, 3584, 1280, 2432, -768, 1920
00023 };
00024
00025 #define F FLOAT
00026 static FLOAT G_enscl[10] = {
00027 (F)0, (F)0, (F).0112, (F).0125, (F).0135,
00028 (F).0143, (F).0147, (F).0145, (F).0167, (F).0204
00029 };
00030 #undef F
00031
00032 static INDEX G_enbits[10] = {
00033 0, 0, 2, 2, 3, 3, 3, 3, 4, 5
00034 };
00035
00036 static INDEX G_entab6[64] = {
00037 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
00038 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
00039 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8,
00040 9, 9, 9, 10, 10, 11, 11, 12, 13, 14, 15
00041 };
00042
00043
00044
00045 VOID quant( BOOL voice[2], INDEX pitch, FLOAT rms, FLOAT rc[ORDER],
00046 INDEX itab[13] )
00047 {
00048 INDEX i2, i, j, idel;
00049 #ifdef NEG_TRUNC
00050 FLOAT ftemp;
00051 #endif
00052
00053
00054 ITAB13_IVOICE = (voice[1]) ? 1 : 0;
00055 if (voice[0])
00056 ITAB13_IVOICE += 2;
00057
00058
00059 ITAB13_IPITCH = pitch;
00060
00061
00062 ITAB13_IRMS = (INDEX)rms;
00063 j = 31;
00064 idel = 16;
00065 if (ITAB13_IRMS>1023)
00066 ITAB13_IRMS = 1023;
00067 while (idel > 0) {
00068 if (ITAB13_IRMS > G_rmst[j])
00069 j -= idel;
00070 else if (ITAB13_IRMS < G_rmst[j])
00071 j += idel;
00072 idel >>= 1;
00073 }
00074 if (ITAB13_IRMS > G_rmst[j])
00075 j--;
00076 ITAB13_IRMS = (j>60) ? 0 : 30 - (j >> 1);
00077
00078
00079 for (i = 0; i < ORDER; i++)
00080 ITAB13_IRC(i) = (INDEX)(rc[i] * 32768L);
00081
00082 for (i = 0; i <2; i++) {
00083 if (ITAB13_IRC(i)<0) {
00084 i2 = (-ITAB13_IRC(i)) >> 9;
00085 ITAB13_IRC(i) = - ((i2>63) ? G_entab6[63] : G_entab6[i2]);
00086 }
00087 else {
00088 i2 = ITAB13_IRC(i) >> 9;
00089 ITAB13_IRC(i) = (i2>63) ? G_entab6[63] : G_entab6[i2];
00090 }
00091 }
00092
00093
00094 for (i = 2; i < ORDER; i++) {
00095 #ifdef NEG_TRUNC
00096 ftemp = ((ITAB13_IRC(i) >> 1) + G_enadd[i]) * G_enscl[i];
00097 i2 = (INDEX)((ftemp<0) ? -((INDEX)(-ftemp)) : ftemp);
00098 #else
00099 i2 = (INDEX)(((ITAB13_IRC(i) >> 1) + G_enadd[i]) * G_enscl[i]);
00100 #endif
00101 if (i2<0)
00102 ITAB13_IRC(i) = (((i2 < -127) ? -127 : i2) / (2 << G_enbits[i]))-1;
00103 else
00104 ITAB13_IRC(i) = ((i2 > 127) ? 127 : i2) / (2 << G_enbits[i]);
00105 }
00106 }
00107
00108