wav文件读写(c++实现)

wav文件格式

维基百科

Waveform Audio File Format(WAVE,又或者是因为扩展名而被大众所知的WAV),是微软与IBM公司所开发在个人电脑存储音频流的编码格式,在Windows平台的应用软件受到广泛的支持,地位上类似于麦金塔电脑里的AIFF。[2] 此格式属于资源交换文件格式(RIFF)的应用之一,通常会将采用脉冲编码调制的音频资存储在区块中。也是其音乐发烧友中常用的指定规格之一。由于此音频格式未经过压缩,所以在音质方面不会出现失真的情况,但文件的体积因而在众多音频格式中较为大。

【描述】
.WAV 与.AIFF 都是被微软操作系统、麦金塔操作系统、Linux操作系统所兼容的,需要特别注意的是,WAV文件与无损文件是不完全相同的,WAV文件只是不去对原有文件去做压缩。

如果源文件案是无损的,那能称WAV就是无损文件。若是将有损压缩的文件(例如: mp3档)转成WAV文件,那么WAV文件也只是忠实地呈现有损文件而已。

制作WAV文件时,会有一个采样率,根据采样定理,若此采样率低于信号最高频率的两倍时,那么超过此最大频率的频段,将会产生混叠的情况,使原始信号受到污染,亦不能称此WAV文件就是无损文件。

虽然WAV文件也能存储被压缩过的文件,但是大多数的WAV文件是用于CD存储原声带的,所以一般来说一般人联想到WAV文件就联想到无损文件,也是无可厚非的。值得注意的是,CD存储的原声带也不代表是完全无损的,音乐制作人会将录制的声音处理后制成母带,通常采样率为96,000赫兹,之后透过转换程序,以16bits、44,100赫兹去做取样。

wav格式

  • WAV文件遵守资源交换文件格式之规则,在文件的前44(或46)字节放置标头(header),使播放器或编辑器能够简单掌握文件的基本信息,其内容以区块(chunk)为最小单位,每一区块长度为4字节,而区块之上则由子区块包裹,每一子区块长度不拘,但须在前头先宣告标签及长度(字节)。
  • 标头的前3个区块记录文件格式及长度;
  • 接着第一个子区块包含8个区块,记录声道数量、采样率等信息;
  • 接着第二个子区块才是真正的音频资料,长度则视音频长度而定。

内容如下表所示。须注意的是,每个区块的端序不尽相同,而音频内容本身则是采用小端序。

wav格式图

data格式

根据声道数和采样位深可以分为以下几种布局:
【8bit单声道】

采样1 采样2
数据1 数据2

【8bit双声道】

声道1数据1 声道2数据1 声道1数据2 声道2数据2

wav读写c++实现

posted @ 2022-09-08 11:10  小超不挑食  阅读(559)  评论(0编辑  收藏  举报