wav文件格式+二进制文件(读+写

WAVE(特指PCM编码格式) 文件头一般是44字节,可用UltraEdit查看wav文件:

 
偏移地址
字节数
数据类型
   
 
文件头
00H
4
char
"RIFF" 标志
04H
4
long int
文件长度
08H
4
char
"WAVE" 标志
0CH
4
char
"fmt" 标志
10H
4
 
过渡字节(不定) 通常为16。不为16则文件头长度要比44字节大。
14H
2
short int
格式类别(01 H PCM 形式的声音数据 )
16H
2
short int
通道数,单声道为 1 ,双声道为 2
18H
4
int
采样率,22.05KHz/...
1CH
4
long int
波形音频数据传送速率,其值为通道数 × 每秒数据位数 × 每样本的数据位数/ 8 。播放软件利用此值可以估计缓冲区的大小。
20H
2
short int
数据块的调整数(按字节算的),其值为通道数 × 每样本的数据位值/ 8 。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。
22H
2
short int
量化位数,8/16..
24H
4
char
数据标记符" data
28H
4
long int
语音数据的长度

文件由文件头和数据段组成,设文件总长度为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这四个字符。
//××××××××对于二进制文件的读
可以不用读char,而直接读short int 等(只能用fwrite(),fstream的write不行)。下面是例程:
#include  < iostream.h >
#include 
< fstream.h >
#include 
< stdio.h >
void  main()
{
//write
fstream outfile("d:/test.bin",ios::out|ios::binary);
char data[4];
short int nTemp=0x1234;//4660
data[0]=nTemp;
data[
1]=nTemp>>8;
data[
2]=98;
data[
3]='
fread(),fwrite()不一定就读、写的都是char(byte)的。可以是别的类型
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值