public static WavSingleChunkHeader ParseWavSingleChunkHeader(Stream wavStream) { WavSingleChunkHeader w = new WavSingleChunkHeader(); byte[] b; BinaryEndianReader r = new BinaryEndianReader(wavStream); b = r.ReadBytes(4); w.FileId = Encoding.Default.GetString(b); w.FileLength = r.ReadUInt32(EndianType.Little); b = r.ReadBytes(4); w.RiffType = Encoding.Default.GetString(b); b = r.ReadBytes(4); w.ChunkHeaderId = Encoding.Default.GetString(b); w.ChunkHeaderLength = r.ReadUInt32(EndianType.Little); long p = wavStream.Position; w.FormatTag = r.ReadUInt16(EndianType.Little); w.Channels = r.ReadUInt16(EndianType.Little); w.SamplesPerSec = r.ReadUInt32(EndianType.Little); w.AvgBytesPerSec = r.ReadUInt32(EndianType.Little); w.BlockAlign = r.ReadUInt16(EndianType.Little); w.BitsPerSample = r.ReadUInt16(EndianType.Little); if (wavStream.Position - p != w.ChunkHeaderLength) w.ExtraBytes = r.ReadBytes((int)(w.ChunkHeaderLength - (wavStream.Position - p))); b = r.ReadBytes(4); w.ChunkId = Encoding.Default.GetString(b); w.ChunkLength = r.ReadUInt32(EndianType.Little); w.DataOffset = (int)wavStream.Position; return w; }