WAV文件头分析

WAV语音文件头部含有44字节的标志信息,其含义如下:

//ckid:4字节 RIFF 标志,大写  

    wavHeader[0]  = 'R';  

    wavHeader[1]  = 'I';  

    wavHeader[2]  = 'F';  

    wavHeader[3]  = 'F';  

  

    //cksize:4字节文件长度,这个长度不包括"RIFF"标志(4字节)和文件长度本身所占字节(4字节),即该长度等于整个文件长度 - 8  

    wavHeader[4]  = (byte)(totalDataLen & 0xff);  

    wavHeader[5]  = (byte)((totalDataLen >> 8) & 0xff);  

    wavHeader[6]  = (byte)((totalDataLen >> 16) & 0xff);  

    wavHeader[7]  = (byte)((totalDataLen >> 24) & 0xff);  

  

    //fcc type:4字节 "WAVE" 类型块标识, 大写  

    wavHeader[8]  = 'W';  

    wavHeader[9]  = 'A';  

    wavHeader[10] = 'V';  

    wavHeader[11] = 'E';  

  

    //ckid:4字节 表示"fmt" chunk的开始,此块中包括文件内部格式信息,小写, 最后一个字符是空格  

    wavHeader[12] = 'f';  

    wavHeader[13] = 'm';  

    wavHeader[14] = 't';  

    wavHeader[15] = ' ';  

  

  //cksize:4字节,文件内部格式信息数据的大小,过滤字节(一般为00000010H)  

   wavHeader[16] = 0x10;  

    wavHeader[17] = 0;  

    wavHeader[18] = 0;  

    wavHeader[19] = 0;  

  

    //FormatTag:2字节,音频数据的编码方式,1:表示是PCM 编码  

    wavHeader[20] = 1;  

    wavHeader[21] = 0;  

  

    //Channels:2字节,声道数,单声道为1,双声道为2  

    wavHeader[22] = (byte) channels;  

    wavHeader[23] = 0;  

  

    //SamplesPerSec:4字节,采样率,如44100  

    wavHeader[24] = (byte)(sampleRate & 0xff);  

    wavHeader[25] = (byte)((sampleRate >> 8) & 0xff);  

    wavHeader[26] = (byte)((sampleRate >> 16) & 0xff);  

    wavHeader[27] = (byte)((sampleRate >> 24) & 0xff);  

  

    //BytesPerSec:4字节,音频数据传送速率, 单位是字节。其值为采样率×每次采样大小。播放软件利用此值可以估计缓冲区的大小;  

    //bytePerSecond = sampleRate * (bitsPerSample / 8) * channels  

    wavHeader[28] = (byte)(bytePerSecond & 0xff);  

    wavHeader[29] = (byte)((bytePerSecond >> 8) & 0xff);  

    wavHeader[30] = (byte)((bytePerSecond >> 16) & 0xff);  

    wavHeader[31] = (byte)((bytePerSecond >> 24) & 0xff);  

  

    //BlockAlign:2字节,每次采样的大小 = 采样精度*声道数/8(单位是字节); 这也是字节对齐的最小单位, 譬如 16bit 立体声在这里的值是 4 字节。  

    //播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整  

    wavHeader[32] = (byte)(bitsPerSample * channels / 8);  

    wavHeader[33] = 0;  

  

    //BitsPerSample:2字节,每个声道的采样精度; 譬如 16bit 在这里的值就是16。如果有多个声道,则每个声道的采样精度大小都一样的;  

   wavHeader[34] = (byte) bitsPerSample;  

    wavHeader[35] = 0;  

  

    //ckid:4字节,数据标志符(data),表示 "data" chunk的开始。此块中包含音频数据,小写;  

    wavHeader[36] = 'd';  

    wavHeader[37] = 'a';  

    wavHeader[38] = 't';  

    wavHeader[39] = 'a';  

  

    //cksize:音频数据的长度,4字节,audioDataLen = totalDataLen - 36 = fileLenIncludeHeader - 44  

    wavHeader[40] = (byte)(audioDataLen & 0xff);  

    wavHeader[41] = (byte)((audioDataLen >> 8) & 0xff);  

    wavHeader[42] = (byte)((audioDataLen >> 16) & 0xff);  

    wavHeader[43] = (byte)((audioDataLen >> 24) & 0xff);  







  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
wav文件是一种常见的音频文件格式,它是由Microsoft和IBM共同定义的。下面是对wav文件格式的详解: 1. 文件Header):wav文件的前44个字节是文件,包含了文件的基本信息。文件的结构如下: - ChunkID(4字节):文件标识,通常为"RIFF"。 - ChunkSize(4字节):文件大小,即整个文件的大小减去8个字节(ChunkID和ChunkSize本身的大小)。 - Format(4字节):文件格式,通常为"WAVE"。 - Subchunk1ID(4字节):子块标识,通常为"fmt "。 - Subchunk1Size(4字节):子块大小,即除去Subchunk1ID和Subchunk1Size本身的大小。 - AudioFormat(2字节):音频格式,常见值为1表示PCM(脉冲编码调制)。 - NumChannels(2字节):声道数,常见值为1表示单声道,2表示立体声。 - SampleRate(4字节):采样率,即每秒采样的样本数。 - ByteRate(4字节):数据传输速率,即每秒传输的字节数。 - BlockAlign(2字节):数据块对齐,即每个采样的字节数。 - BitsPerSample(2字节):样本位数,即每个采样的位数。 2. 数据块(Data Chunk):文件之后的部分是音频数据块,包含了实际的音频采样数据。数据块的结构如下: - Subchunk2ID(4字节):子块标识,通常为"data"。 - Subchunk2Size(4字节):子块大小,即音频数据的大小。 - Data(变长):音频数据,以二进制形式存储。 在wav文件中,音频数据以采样点的形式存储,每个采样点的值表示音频信号在该时间点上的幅度。采样点的位数(BitsPerSample)决定了每个采样点的精度,位数越高,精度越高,音频质量也越好。 总结起来,wav文件格式通过文件和数据块来存储音频数据,其中文件包含了文件的基本信息,数据块存储了实际的音频采样数据。通过解析文件和读取数据块中的采样数据,可以对wav文件进行分析和处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值