pbands code seems to work, cleaned up useless junk in mode definitions
diff --git a/libcelt/modes.c b/libcelt/modes.c
index 21e937b..48c9e00 100644
--- a/libcelt/modes.c
+++ b/libcelt/modes.c
@@ -40,44 +40,8 @@
#define PBANDS128 8
#define PITCH_END128 45
-static const float means[15] = {
- 14.8621, 12.6918, 10.2978, 9.5862, 10.3784,
- 10.4555, 9.1594, 9.0280, 8.3291, 8.3410,
- 8.5737, 8.5614, 9.0107, 7.6809, 7.0665};
-
-static const float means18[18] = {
- 9.9067, 8.4524, 6.8577, 6.3804, 6.1786, 5.9815,
- 6.2068, 6.1076, 5.7711, 5.7734, 5.7935, 5.3981,
- 5.1992, 5.7214, 5.9656, 5.7548, 5.0802, 4.2626};
-
-static const int decay[15] = {
- 14800, 13800, 12600, 12000, 11000, 10000, 9800, 8400, 8000, 7500, 7000, 7000, 7000, 6000, 6000
-};
-
-static const int decay18[18] = {
- 14800, 13800, 12600, 12000, 11000, 11000, 10000, 10000, 9800, 8400, 8400, 8000, 7500, 7000, 7000, 7000, 6000, 6000
-};
-
const int qbank0[NBANDS +2] = {0, 4, 8, 12, 16, 20, 24, 28, 32, 38, 44, 52, 62, 74, 90,112,142,182, 232,256};
const int pbank0[PBANDS +2] = {0, 4, 8, 12, 16, 24, 38, 62, PITCH_END, 256};
-//const int pbank0[PBANDS +2] = {0, 4, 8, 12, 19, PITCH_END, 128};
-const int qpulses0[NBANDS ] = {7, 6, 6, 5, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, -3, -2, 0, 0};
-//const int qpulses0[NBANDS ] = {7, 5, 5, 5, 4, 4, 3, 3, 3, 3, 4, 3, 3, -2, 0, 0, 0, 0};
-
-
-const int qbank1[NBANDS128+2] = {0, 2, 4, 6, 8, 12, 16, 20, 24, 28, 36, 44, 52, 68, 84, 116, 128};
-
-const int qpulses1[NBANDS128] = {7, 5, 5, 5, 4, 5, 4, 5, 5, 4, 2, 0, 0, 0, 0};
-const int qpulses2[NBANDS] = {28,25,23,20,18,15, 13, 11, 10, 8,8, 7, 7, -6, -5, -4, -1, -1};
-//const int qpulses2[NBANDS128] = {28,24,20,16,24,20, 18, 12, 10, 10,-7, -4, 1, 1, 1, 1, 1, 1};
-const int qpulses2s[NBANDS128] ={38,30,24,20,24,20, 18, 16, 14, 20,-20,-14, -8, -8, -5};
-
-const int qpulses4s[NBANDS] ={38,31,25,21,18,16, 14, 12, 14, 12,14,15, 14, 15, 16, 12, 10, 6};
-
-//const int qpulses4s[NBANDS128] ={38,35,30,27,24,22, 21, 20, 22, 20,20,20, 20, 20, 14, 12, 12, 12};
-
-const int pbank1[PBANDS128+2] = {0, 2, 4, 6, 8, 12, 20, 28, PITCH_END128, 128};
-//const int pbank1[PBANDS128+2] = {0, 4, 8, 12, 20, PITCH_END128, 128};
#define NALLOCS 7
int bitalloc0[NBANDS*NALLOCS] =
@@ -110,11 +74,8 @@
qbank0, /**< eBands */
pbank0, /**< pBands*/
- qpulses0, /**< nbPulses */
0.8, /**< ePredCoef */
- means18, /**< eMeans */
- decay18, /**< eDecay */
NALLOCS, /**< nbAllocVectors */
bitalloc0, /**< allocVectors */
@@ -134,11 +95,8 @@
qbank0, /**< eBands */
pbank0, /**< pBands*/
- qpulses4s, /**< nbPulses */
0.8, /**< ePredCoef */
- means18, /**< eMeans */
- decay18, /**< eDecay */
NALLOCS, /**< nbAllocVectors */
bitalloc0, /**< allocVectors */
@@ -182,11 +140,8 @@
qbank51, /**< eBands */
pbank51, /**< pBands*/
- 0, /**< nbPulses */
0.8, /**< ePredCoef */
- means18, /**< eMeans */
- decay18, /**< eDecay */
NALLOCS51, /**< nbAllocVectors */
bitalloc51, /**< allocVectors */
@@ -249,12 +204,12 @@
eBands[i] = MIN_BINS*i;
/* Spacing follows critical bands */
for (i=0;i<high;i++)
- eBands[i+low] = bark_freq[lin+i]/res;
+ eBands[i+low] = (bark_freq[lin+i]+res/2)/res;
/* Enforce the minimum spacing at the boundary */
for (i=0;i<*nbEBands;i++)
if (eBands[i] < MIN_BINS*i)
eBands[i] = MIN_BINS*i;
- eBands[*nbEBands] = bark_freq[BARK_BANDS]/res;
+ eBands[*nbEBands] = (bark_freq[BARK_BANDS]+res/2)/res;
eBands[*nbEBands+1] = frame_size;
if (eBands[*nbEBands] > eBands[*nbEBands+1])
eBands[*nbEBands] = eBands[*nbEBands+1];
@@ -274,20 +229,37 @@
mode->nbPBands = PBANDS;
for (i=0;i<PBANDS+1;i++)
{
- pBands[i] = pitch_freq[i]/res;
+ pBands[i] = (pitch_freq[i]+res/2)/res;
if (pBands[i] < mode->eBands[i])
pBands[i] = mode->eBands[i];
}
pBands[PBANDS+1] = mode->eBands[mode->nbEBands+1];
+ for (i=1;i<mode->nbPBands+1;i++)
+ {
+ int j;
+ for (j=0;j<mode->nbEBands;j++)
+ if (mode->eBands[j] <= pBands[i] && mode->eBands[j+1] > pBands[i])
+ break;
+ printf ("%d %d\n", i, j);
+ if (mode->eBands[j] != pBands[i])
+ {
+ if (pBands[i]-mode->eBands[j] < mode->eBands[j+1]-pBands[i] &&
+ mode->eBands[j] != pBands[i-1])
+ pBands[i] = mode->eBands[j];
+ else
+ pBands[i] = mode->eBands[j+1];
+ }
+ }
for (i=0;i<mode->nbPBands+2;i++)
printf("%d ", pBands[i]);
printf ("\n");
mode->pBands = pBands;
+ mode->pitchEnd = pBands[PBANDS];
}
CELTMode *celt_mode_create(int Fs, int channels, int frame_size, int overlap)
{
- int i, res, min_width, lin, low, high;
+ int res;
CELTMode *mode;
res = (Fs+frame_size)/(2*frame_size);
@@ -299,12 +271,16 @@
mode->nbChannels = channels;
mode->eBands = compute_ebands(Fs, frame_size, &mode->nbEBands);
compute_pbands(mode, res);
+ mode->ePredCoef = .8;
+
printf ("%d bands\n", mode->nbEBands);
+ return mode;
}
/*int main()
{
celt_mode_create(44100, 1, 256, 128);
+ return 0;
}*/