/// <summary> /// Writes the header pages that start the Ogg Speex file. Prepares file for /// data to be written. /// </summary> /// /// <param name="comment">description to be included in the header.</param> /// @exception IOException public override void WriteHeader(String comment) { byte[] header; byte[] data; NSpeex.OggCrc crc = new NSpeex.OggCrc(); /* writes the OGG header page */ header = BuildOggPageHeader(2, 0, streamSerialNumber, pageCount++, 1, new byte[] { 80 }); data = NSpeex.AudioFileWriter.BuildSpeexHeader(sampleRate, mode, channels, vbr, nframes); crc.Initialize(); crc.TransformBlock(header, 0, header.Length, header, 0); crc.TransformFinalBlock(data, 0, data.Length); xout.Write(header, 0, 22); xout.Write(crc.Hash, 0, crc.HashSize / 8); xout.Write(header, 26, header.Length - 26); xout.Write(data, 0, data.Length); /* writes the OGG comment page */ header = BuildOggPageHeader(0, 0, streamSerialNumber, pageCount++, 1, new byte[] { (byte)(comment.Length + 8) }); data = NSpeex.AudioFileWriter.BuildSpeexComment(comment); crc.Initialize(); crc.TransformBlock(header, 0, header.Length, header, 0); crc.TransformFinalBlock(data, 0, data.Length); xout.Write(header, 0, 22); xout.Write(crc.Hash, 0, crc.HashSize / 8); xout.Write(header, 26, header.Length - 26); xout.Write(data, 0, data.Length); }
/// <summary> /// Flush the Ogg page out of the buffers into the file. /// </summary> /// /// <param name="eos"> -</param> /// @exception IOException private void Flush(bool eos) { byte[] header; NSpeex.OggCrc crc = new NSpeex.OggCrc(); /* writes the OGG header page */ header = BuildOggPageHeader(((eos) ? 4 : 0), granulepos, streamSerialNumber, pageCount++, packetCount, headerBuffer); crc.Initialize(); crc.TransformBlock(header, 0, header.Length, header, 0); crc.TransformFinalBlock(dataBuffer, 0, dataBufferPtr); xout.Write(header, 0, 22); xout.Write(crc.Hash, 0, crc.HashSize / 8); xout.Write(header, 26, header.Length - 26); xout.Write(dataBuffer, 0, dataBufferPtr); dataBufferPtr = 0; headerBufferPtr = 0; packetCount = 0; }