public void set_side_info(FrameData fd){
        for(int ch = 0; ch < channels; ch++)
            side_info.set_scfsi(fd.si.scfsi[ch], ch);
        
        for(int gr = 0; gr < max_gr; gr++)
            for(int ch = 0; ch < channels; ch++){
            Channel gi = fd.si.gr[gr].ch[ch];
            if(gi.window_switching_flag != 0)
                side_info.set_granule_info(ch, gr, fd.getBigValues(ch, gr),
                        fd.getCount1TableSelect(ch, gr), fd.getGlobalGain(ch, gr),
                        fd.getPart23Length(ch, gr), 0, fd.getPreflag(ch, gr),
                        fd.getBlockType(ch, gr), fd.getScalefactCompress(ch, gr),
                        fd.getTableSelect(ch, gr), fd.getMixedBlockFlag(ch, gr),
                        fd.getScalefacScale(ch, gr), fd.getSubblockGain(ch, gr));
            
            else side_info.set_granule_info(ch, gr, gi.big_values,
                    gi.count1table_select, gi.global_gain, gi.part2_3_length,
                    0, gi.preflag, gi.region0_count, gi.region1_count,
                    gi.scalefac_compress, gi.table_select, gi.block_type,
                    gi.scalefac_scale);
            }
    }