void init(Info vi)
{
this.vi = vi;
modebits = VUtils.ilog2(vi.modes);
transform[0] = new Mdct();
transform[1] = new Mdct();
((Mdct)transform[0]).init(vi.blocksizes[0]);
((Mdct)transform[1]).init(vi.blocksizes[1]);
wnd[0][0][0] = window(vi.blocksizes[0], vi.blocksizes[0] / 2, vi.blocksizes[0] / 2);
wnd[1][0][0] = window(vi.blocksizes[1], vi.blocksizes[0] / 2, vi.blocksizes[0] / 2);
wnd[1][0][1] = window(vi.blocksizes[1], vi.blocksizes[0] / 2, vi.blocksizes[1] / 2);
wnd[1][1][0] = window(vi.blocksizes[1], vi.blocksizes[1] / 2, vi.blocksizes[0] / 2);
wnd[1][1][1] = window(vi.blocksizes[1], vi.blocksizes[1] / 2, vi.blocksizes[1] / 2);
fullbooks = new CodeBook[vi.books];
for (int i = 0; i < vi.books; i++)
{
fullbooks[i] = new CodeBook();
fullbooks[i].init_decode(vi.book_param[i]);
}
// initialize the storage vectors to a decent size greater than the minimum
pcm_storage = 8192; // we'll assume later that we have a minimum of twice
// the blocksize of accumulated samples in analysis
pcm = new float[vi.channels][];
for (int i = 0; i < vi.channels; i++)
{
pcm[i] = new float[pcm_storage];
}
// all 1 (large block) or 0 (small block)
// explicitly set for the sake of clarity
lW = 0; // previous window size
W = 0; // current window size
// all vector indexes; multiples of samples_per_envelope_step
centerW = vi.blocksizes[1] / 2;
pcm_current = centerW;
// initialize all the mapping/backend lookups
mode = new Object[vi.modes];
for (int i = 0; i < vi.modes; i++)
{
int mapnum = vi.mode_param[i].mapping;
FuncMapping mapping = vi.map_funcs[mapnum];
mode[i] = mapping.look(this, vi.mode_param[i], vi.map_param[mapnum]);
}
}