public override object inverse1(Block vb, object i, object memo)
{
LookFloor0 look = (LookFloor0)i;
InfoFloor0 info = look.vi;
float[] lsp = null;
if (memo is float[])
{
lsp = (float[])memo;
}
int ampraw = vb.opb.read(info.ampbits);
if (ampraw > 0)
{
// also handles the -1 out of data case
int maxval = (1 << info.ampbits) - 1;
float amp = (float)ampraw / maxval * info.ampdB;
int booknum = vb.opb.read(Util.ilog(info.numbooks));
if (booknum != -1 && booknum < info.numbooks)
{
CodeBook b = vb.vd.fullbooks[info.books[booknum]];
float last = 0.0f;
if (lsp == null || lsp.Length < look.m + 1)
{
lsp = new float[look.m + 1];
}
else
{
for (int j = 0; j < lsp.Length; j++)
{
lsp[j] = 0.0f;
}
}
for (int j = 0; j < look.m; j += b.dim)
{
if (b.decodev_set(lsp, j, vb.opb, b.dim) == -1)
{
return(null);
}
}
for (int j = 0; j < look.m;)
{
for (int k = 0; k < b.dim; k++, j++)
{
lsp[j] += last;
}
last = lsp[j - 1];
}
lsp[look.m] = amp;
return(lsp);
}
}
return(null);
}