Esempio n. 1
0
        public static uint get_bits(stb_vorbis f, int n)
        {
            uint z;

            if (f.valid_bits < 0)
            {
                return(0);
            }
            if (f.valid_bits < n)
            {
                if (n > 24)
                {
                    z  = get_bits(f, 24);
                    z += get_bits(f, n - 24) << 24;
                    return(z);
                }

                if (f.valid_bits == 0)
                {
                    f.acc = 0;
                }
                while (f.valid_bits < n)
                {
                    var z2 = get8_packet_raw(f);
                    if (z2 == -1)
                    {
                        f.valid_bits = -1;
                        return(0);
                    }

                    f.acc        += (uint)(z2 << f.valid_bits);
                    f.valid_bits += 8;
                }
            }

            if (f.valid_bits < 0)
            {
                return(0);
            }
            z             = (uint)(f.acc & ((1 << n) - 1));
            f.acc       >>= n;
            f.valid_bits -= n;
            return(z);
        }
Esempio n. 2
0
        private Vorbis(byte[] data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            _data = data;

            stb_vorbis vorbis;

            fixed(byte *b = data)
            {
                vorbis = stb_vorbis_open_memory(b, data.Length, null, null);
            }

            _vorbis          = vorbis;
            _vorbisInfo      = stb_vorbis_get_info(vorbis);
            _lengthInSeconds = stb_vorbis_stream_length_in_seconds(_vorbis);

            _songBuffer = new short[_vorbisInfo.sample_rate];

            Restart();
        }