View Single Post
Old 29th December 2005, 10:56   #9  |  Link
dimzon
BeHappy/MeGUI developer
 
dimzon's Avatar
 
Join Date: Oct 2003
Location: Moscow, Russia
Posts: 1,727
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);
}
dimzon is offline   Reply With Quote