Example #1
0
 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);
 }
Example #2
0
 protected void SetFormat(WaveFormat2 fmt)
 {
     _fmt = fmt;
     if (_ckFmt == null)
     {
         _baseStream.Position = _ckData.Start + 12;
         _ckFmt = new FmtChunk(_baseStream, fmt);
     }
 }
Example #3
0
 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);
 }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
        }