csvorbis.CodeBook.decodevs C# (CSharp) Method

decodevs() private method

private decodevs ( float a, int index, csBuffer b, int step, int addmul ) : int
a float
index int
b csogg.csBuffer
step int
addmul int
return int
        internal int decodevs(float[] a, int index, csBuffer b, int step,int addmul)
        {
            int entry=decode(b);
            if(entry==-1)return(-1);
            switch(addmul)
            {
                case -1:
                    for(int i=0,o=0;i<dim;i++,o+=step)
                        a[index+o]=valuelist[entry*dim+i];
                    break;
                case 0:
                    for(int i=0,o=0;i<dim;i++,o+=step)
                        a[index+o]+=valuelist[entry*dim+i];
                    break;
                case 1:
                    for(int i=0,o=0;i<dim;i++,o+=step)
                        a[index+o]*=valuelist[entry*dim+i];
                    break;
                default:
                //nothing
                    break;
            }
            return(entry);
        }

Usage Example

Esempio n. 1
0
        internal int inverse(Block vb, Object i, float[] fout)
        {
            //System.err.println("Floor0.inverse "+i.getClass()+"]");
            LookFloor0 look   = (LookFloor0)i;
            InfoFloor0 info   = look.vi;
            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)
                {
                    lock (this)
                    {
                        if (lsp == null || lsp.Length < look.m)
                        {
                            lsp = new float[look.m];
                        }
                        else
                        {
                            for (int j = 0; j < look.m; j++)
                            {
                                lsp[j] = 0.0f;
                            }
                        }

                        CodeBook b    = vb.vd.fullbooks[info.books[booknum]];
                        float    last = 0.0f;

                        for (int j = 0; j < look.m; j++)
                        {
                            fout[j] = 0.0f;
                        }

                        for (int j = 0; j < look.m; j += b.dim)
                        {
                            if (b.decodevs(lsp, j, vb.opb, 1, -1) == -1)
                            {
                                for (int k = 0; k < look.n; k++)
                                {
                                    fout[k] = 0.0f;
                                }

                                return(0);
                            }
                        }

                        for (int j = 0; j < look.m;)
                        {
                            for (int k = 0; k < b.dim; k++, j++)
                            {
                                lsp[j] += last;
                            }

                            last = lsp[j - 1];
                        }

                        // take the coefficients back to a spectral envelope curve
                        Lsp.lsp_to_curve(fout, look.linearmap, look.n, look.ln,
                                         lsp, look.m, amp, info.ampdB);

                        return(1);
                    }
                }
            }

            return(0);
        }