protected virtual bool InitializeForWriting(Stream underlyingStream, WaveFormat2 wfIn, WaveFormat2 wfOut, bool fAppend) { if (fAppend) { long position = underlyingStream.Position; underlyingStream.Seek(0, SeekOrigin.Begin); LoadHeader(); _ckData.BeginWrite(); _ckData.Seek(position - _ckData.DataStart, SeekOrigin.Begin); } else { _baseStream.Position = 0; _mmc = new RiffChunk(underlyingStream); (_mmc as RiffChunk).BeginWrite(); _ckFmt = new FmtChunk(underlyingStream, wfOut); _mmc.AppendChunk(_ckFmt); _ckFmt.BeginWrite(); _ckFmt.Write(_ckFmt.WaveFormat.GetBytes()); _fmt = wfOut; _ckData = new DataChunk(underlyingStream); _mmc.AppendChunk(_ckData); _ckData.BeginWrite(); } return(true); }
protected void SetFormat(WaveFormat2 fmt) { _fmt = fmt; if (_ckFmt == null) { _baseStream.Position = _ckData.Start + 12; _ckFmt = new FmtChunk(_baseStream, fmt); } }
protected virtual void LoadHeader() { _mmc = MMChunk.FromStream(_baseStream); _ckFmt = _mmc.FindChunk(FourCC.Fmt) as FmtChunk; if (_ckFmt != null) { _fmt = _ckFmt.WaveFormat; } _ckData = _mmc.FindChunk(FourCC.Data) as DataChunk; if (_ckData != null) { _posData = _ckData.DataStart; } _baseStream.Seek(_posData, SeekOrigin.Begin); }
static public MMChunk FromStream(Stream st) { if (!st.CanRead) { return(null); } if (st.Position > st.Length - 4) { return(null); } byte[] data = new byte[4]; st.Read(data, 0, 4); FourCC fourCC = BitConverter.ToInt32(data, 0); if (fourCC == FourCC.Riff) { RiffChunk ck = new RiffChunk(st); ck.LoadFromStream(st); return(ck); } else if (fourCC == FourCC.Fmt) { FmtChunk ck = new FmtChunk(st, null); ck.LoadFromStream(st); return(ck); } else if (fourCC == FourCC.Data) { DataChunk ck = new DataChunk(st); ck.LoadFromStream(st); return(ck); } else { _RiffChunk ck = new _RiffChunk(fourCC, st); ck.LoadFromStream(st); return(ck); } }
virtual public MMChunk CreateSubChunk(FourCC fourCC, Stream st) { if (fourCC == FourCC.Riff) { MMChunk ck = new RiffChunk(st); m_chunkList.Add(ck); return(ck); } else if (fourCC == FourCC.Fmt) { MMChunk ck = new FmtChunk(st, null); m_chunkList.Add(ck); return(ck); } else if (fourCC == FourCC.Data) { MMChunk ck = new DataChunk(st); m_chunkList.Add(ck); return(ck); } return(null); }