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); }
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(); }