private void firstWriteHeaders() { // Create data header header.Header = new char[] { 'd', 'a', 't', 'a' }; header.Length = this.bytes; byte[] dataHeader = header.GetBytes(); // Create Wave format header format.FmtHeader = new char[] { 'f', 'm', 't', ' ' }; format.Length = 16; format.Channels = (short)this.channels; format.FormatTag = (short)sampleFormat.ToWaveFormat(); format.SamplesPerSecond = sampleRate; format.BitsPerSample = (short)this.bitsPerSample; format.BlockAlignment = (short)this.blockAlign; format.AverageBytesPerSecond = this.averageBitsPerSecond / 8; waveFormat = format.GetBytes(); // Create RIFF header riff.RiffHeader = new char[] { 'R', 'I', 'F', 'F' }; riff.WaveHeader = new char[] { 'W', 'A', 'V', 'E' }; riff.Length = this.bytes + dataHeader.Length + waveFormat.Length; byte[] riffHeader = riff.GetBytes(); // Write headers to allocate space waveStream.Write(riffHeader, 0, riffHeader.Length); waveStream.Write(waveFormat, 0, waveFormat.Length); waveStream.Write(dataHeader, 0, dataHeader.Length); }