帮忙把wav文件头写入文件

dandantcb 2009-03-15 04:46:09
我定义了个wav的文件头,想写到文件里头去,不知道怎么弄。。因为涉及到低字节在前,高字节在后的问题。。请熟悉wav文件的朋友帮忙。。
我的wav文件头如下,请帮忙把这个文件头写入文件中。。谢谢~~~

public struct WAVE_Header
{
public string RIFF_ID; //4 byte , 'RIFF'
public long File_Size; //4 byte , 文件长度
public string RIFF_Type; //4 byte , 'WAVE'

public string FMT_ID; //4 byte , 'fmt'
public long FMT_Size; //4 byte , 数值为16或18,18则最后又附加信息
public short FMT_Tag; //2 byte , 编码方式,一般为0x0001
public ushort FMT_Channel; //2 byte , 声道数目,1--单声道;2--双声道
public ulong FMT_SamplesPerSec;//4 byte , 采样频率
public ulong AvgBytesPerSec; //4 byte , 每秒所需字节数,记录每秒的数据量
public ushort BlockAlign; //2 byte , 数据块对齐单位(每个采样需要的字节数)
public ushort BitsPerSample; //2 byte , 每个采样需要的bit数

public string DATA_ID; //4 byte , 'data'
public long DATA_Size; //4 byte ,

}
WAVE_Header wav_Header = new WAVE_Header();
public void Ini_wav_Header(long data_len)
{
wav_Header.RIFF_ID = "RIFF";
wav_Header.File_Size = data_len + 36;
wav_Header.RIFF_Type = "WAVE";

wav_Header.FMT_ID = "fmt";
wav_Header.FMT_Size = 16;
wav_Header.FMT_Tag = 0x0001;
wav_Header.FMT_Channel = 1; //单声道
wav_Header.FMT_SamplesPerSec = 32000; //采样频率
wav_Header.AvgBytesPerSec = 32000; //每秒所需字节数
wav_Header.BlockAlign = 1; //每个采样1个字节
wav_Header.BitsPerSample = 8; //每个采样8bit

wav_Header.DATA_ID = "data";
wav_Header.DATA_Size = data_len;
}
...全文
171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dandantcb 2009-03-19
  • 打赏
  • 举报
回复
自己顶。。。。来人帮忙啊。。。不要自己手动移位操作的。。。
dandantcb 2009-03-16
  • 打赏
  • 举报
回复
好像应该用encoding之类的东西。。但是整了一晚上没整出来。。
  • 打赏
  • 举报
回复
文件由文件头和数据段组成,设文件总长度为fileSize字节,头大小为headSize,数据段长度为dataSize,则fileSize=headSize+dataSize;

04H处那个文件长度指fileSize-8;28H处的即为dataSize。





wav文件是二进制文件,对其读写只能用read()和write()函数。



write:

比如将一个short int 形value写入二进制文件,则要定义

char tmp[3];tmp[0]=value;tmp[1]=value>>8;tmp[2]='\0';

file.write(tmp,2);

而不能用别的函数,如file<<value;<<这些函数都是先将value转换为文本,再写入文件的。比如value=0x1234=4660;则写入文件的不是两个字节的0x1234,而是四个字节的4 6 6 0这四个字符。

dandantcb 2009-03-15
  • 打赏
  • 举报
回复
顶起来。。来人帮忙啊。。

111,126

社区成员

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

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

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