Quote:
Originally Posted by tebasuna51
I prefer the faad method (0xFFFFFF00) because Foobar method can be confused with valid fields.
|
pleaese check this code:
Code:
private long m_nSizeInBytes;
...
private void writeHeader(Stream target )
{
const uint FAAD_MAGIC_VALUE = 0xFFFFFF00;
const uint WAV_HEADER_SIZE = 36;
bool useFaadTrick = m_nSizeInBytes>=(uint.MaxValue-WAV_HEADER_SIZE);
target.Write(System.Text.Encoding.ASCII.GetBytes("RIFF"),0,4);
target.Write(BitConverter.GetBytes(useFaadTrick?FAAD_MAGIC_VALUE:(uint)(m_nSizeInBytes + WAV_HEADER_SIZE)),0,4);
target.Write(System.Text.Encoding.ASCII.GetBytes("WAVEfmt "),0,8);
target.Write(BitConverter.GetBytes((uint)0x10),0,4);
target.Write(BitConverter.GetBytes(m_wavHeader.wFormatTag),0,2);
target.Write(BitConverter.GetBytes(m_wavHeader.nChannels),0,2);
target.Write(BitConverter.GetBytes(m_wavHeader.nSamplesPerSec),0,4);
target.Write(BitConverter.GetBytes(m_wavHeader.nAvgBytesPerSec),0,4);
target.Write(BitConverter.GetBytes(m_wavHeader.nBlockAlign),0,2);
target.Write(BitConverter.GetBytes(m_wavHeader.wBitsPerSample),0,2);
target.Write(System.Text.Encoding.ASCII.GetBytes("data"),0,4);
target.Write(BitConverter.GetBytes(useFaadTrick?FAAD_MAGIC_VALUE:(uint)m_nSizeInBytes),0,4);
}