关于wav头文件格式的问题,保存后的wav文件不能正常播放

xinyun80 2008-11-04 04:48:14
我的头文件是这样写的,大家帮忙看看是不是有问题:
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));
...全文
346 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wojiushiliumang 2008-11-06
  • 打赏
  • 举报
回复
up
xinyun80 2008-11-06
  • 打赏
  • 举报
回复
没人来帮衬一下吗,要结贴了啊
xinyun80 2008-11-05
  • 打赏
  • 举报
回复
thank you ,我再试一下
cpio 2008-11-05
  • 打赏
  • 举报
回复
具体就是数据的长度,如果它为零的话,表示没有数据
xinyun80 2008-11-04
  • 打赏
  • 举报
回复
具体应该是怎样,这方面不是太精通
cpio 2008-11-04
  • 打赏
  • 举报
回复
nLength 是0啊?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧