public OggVorbisEncodedStream(byte[] buffer) { //this.buffer = buffer; rawStream = new MemoryStream(buffer); //Open file = new NativeOggVorbisFile(); NativeCallbacks callbacks = new NativeCallbacks(); callbacks.ReadFunction = new ReadFunctionDelegate(this.RawStreamRead); callbacks.TellFunction = new TellFunctionDelegate(this.RawStreamTell); callbacks.SeekFunction = new SeekFunctionDelegate(this.RawStreamSeek); int result = 0; if ((result = OggVorbisFile.NativeOpenCallbacks(buffer, file, IntPtr.Zero, 0, callbacks)) != 0) { throw new OggVorbisException(String.Format("Error {0} during open", result)); } //Get info info = new VorbisInfo(OggVorbisFile.NativeGetInfo(file, -1)); //Get lengths of the stream pcmLength = OggVorbisFile.NativeGetLength(file, -1); // -1 to entire bitstream rawLength = OggVorbisFile.NativeGetRawLength(file, -1); // -1 to entire bitstream duration = OggVorbisFile.NativeGetDuration(file, -1); // -1 to entire bitstream //Update info info.Duration = duration; }
public override void Close() { base.Close(); if (file != null) { OggVorbisFile.NativeClear(file); } }
public override int Read(byte[] buffer, int offset, int length) { unsafe { fixed(byte *bp = buffer) { //init and set initial pointer position int size = 0; int result = 0; byte *bufferPos = bp + offset; while (size < length) { bufferPos = bp + offset + size; // going to the correct buffer position result = OggVorbisFile.NativeRead(file, bufferPos, length - size, 0, 2, 1, IntPtr.Zero); if (result > 0) { size += result; } else if (result == 0) { break; } else //if (result < 0) { if (result == -1) { throw new OggVorbisException("The initial file headers couldn't be read or are corrupt, or that the initial open call for vf failed."); } if (result == -2) { throw new OggVorbisException("An invalid stream section was supplied to libvorbisfile, or the requested link is corrupt."); } if (result == -3) { throw new OggVorbisException("There was an interruption in the data. (one of: garbage between pages, loss of sync followed by recapture, or a corrupt page)"); } else { throw new OggVorbisException("Unknown OggVorbis error: " + result); } } } return(result); } } }
public OggVorbisFileStream(string filename) { //Open File file = new NativeOggVorbisFile(); //if (ov_open(stream.SafeFileHandle, ref vf, IntPtr.Zero,0) == 0) // fopen for Win32! if (OggVorbisFile.NativeFOpen(filename, file) != 0) { throw new OggVorbisException("Error during fopen"); } //Get info info = new VorbisInfo(OggVorbisFile.NativeGetInfo(file, -1)); //Get lengths of the stream pcmLength = OggVorbisFile.NativeGetLength(file, -1); // -1 to entire bitstream rawLength = OggVorbisFile.NativeGetRawLength(file, -1); // -1 to entire bitstream duration = OggVorbisFile.NativeGetDuration(file, -1); // -1 to entire bitstream //Update info info.Duration = duration; }
public virtual int SeekTime(double time) { return(OggVorbisFile.NativeSeekTime(file, time)); }
public override long Seek(long offset, SeekOrigin origin) { // Using this because it's the fastest seek method possible (with crosslap) OggVorbisFile.NativeSeek(file, offset); return(file.PcmOffset); }