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);
}