关于wav头文件格式的问题,保存后的wav文件不能正常播放
我的头文件是这样写的,大家帮忙看看是不是有问题:
waveFile = new System.IO.MemoryStream();
System.IO.BinaryWriter s = new System.IO.BinaryWriter(waveFile);
char[] ChunkRiff = { 'R', 'I', 'F', 'F' };
char[] ChunkType = { 'W', 'A', 'V', 'E' };
char[] ChunkFmt = { 'f', 'm', 't', ' ' };
char[] ChunkData = { 'd', 'a', 't', 'a' };
short shPad = 1; // File padding
int nFormatChunkLength = 0x10; // Format chunk length.
int nLength = 0; // File length, minus first 8 bytes of RIFF description. This will be filled in later.
short shBytesPerSample = 0; // Bytes per sample.
// 一个样本点的字节数目
if (8 == wavefmt.nSamplesPerSec && 1 == wavefmt.nChannels)
shBytesPerSample = 1;
else if ((8 == wavefmt.wBitsPerSample && 2 == wavefmt.nChannels) || (16 == wavefmt.nSamplesPerSec && 1 == wavefmt.nChannels))
shBytesPerSample = 2;
else if (16 == wavefmt.wBitsPerSample && 2 == wavefmt.nChannels)
shBytesPerSample = 4;
// RIFF 块
s.Write(ChunkRiff);
s.Write(nLength);
s.Write(ChunkType);
// WAVE块
s.Write(ChunkFmt);
s.Write(nFormatChunkLength);
s.Write(shPad);
s.Write(wavefmt.nChannels);
s.Write(wavefmt.nSamplesPerSec);
s.Write(wavefmt.nAvgBytesPerSec);
s.Write(shBytesPerSample);
s.Write(wavefmt.wBitsPerSample);
// 数据块
s.Write(ChunkData);
s.Write((int)0); // The sample length will be written in later.
s.Write((int)(this.waveStream.Length));