using System; using System.IO; using csogg; using csvorbis; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license namespace OggUtils { public class OggStreamingData { private readonly Page page; public Block Block; public readonly DspState DspState; public readonly SyncState SyncState; public readonly StreamState StreamState; public readonly Packet Packet; public readonly Info Info; public readonly Comment Comment; public bool EndOfStream; public Stream Input { get; private set; } public bool EndOfPage { get { return page.eos() != 0; } } public OggStreamingData(Stream setInput) { Input = setInput; page = new Page(); DspState = new DspState(); SyncState = new SyncState(); StreamState = new StreamState(); Packet = new Packet(); Info = new Info(); Comment = new Comment(); Block = new Block(DspState); } public bool InitSyncState() { SyncState.init(); SyncState.buffer(4096); byte[] readData = SyncState.data; int bytes = Input.Read(readData, 0, readData.Length); SyncState.wrote(bytes); if (PageOut() == 1) return true; if (bytes < 4096) return false; throw new Exception("Input does not appear to be an Ogg bitstream."); } public int ReadSyncStateDataAt(int index) { return Input.Read(SyncState.data, index, 4096); } public void InitStreamState() { StreamState.init(page.serialno()); } public int PageIn() { return StreamState.pagein(page); } public int PageOut() { return SyncState.pageout(page); } public int PacketOut() { return StreamState.packetout(Packet); } } }