wave文件(.wav)格式、PCM数据格式
PCM编码与Waveform音频文件(.wav)格式详解
PCM编码与Waveform⾳频⽂件(.wav)格式详解 ⼤家好,我是痞⼦衡,是正经搞技术的痞⼦。
今天痞⼦衡给⼤家介绍的是PCM编码及Waveform⾳频⽂件格式。
嵌⼊式⾥有时候也会和⾳频打交道,⽐如最近特别⽕的智能⾳箱产品,离不开前端的⾳频信号采集、降噪,中间的语⾳识别(ASR)、⾃然语⾔处理(NLP),以及后端的⽂语合成(TTS)、⾳频播放。
⾳频信号采集是处理声⾳的第⼀步,要采集⾳频就离不开PCM编码,⾳频采集完成⾃然需要保存,waveform格式(.wav)是⼀种最经典的⾳频⽂件格式。
今天痞⼦衡就给⼤家详细介绍PCM编码以及waveform⽂件格式。
⼀、声⾳基础 众所周知,声⾳是由物体振动产⽣的声波,声⾳通过介质(空⽓或固体、液体)传播并能被⼈听觉器官所感知。
发⾳物体情况(材料,距离,振动强度等)不同,产⽣的声⾳也不同。
为了区分不同的声⾳,我们主要⽤如下三个参数来描述声⾳的特征:⾳量:⼈主观上感觉到的声⾳⼤⼩(也叫响度),由“振幅”(amplitude)和⼈离声源的距离决定。
⾳调:声⾳的⾼低(⾼⾳、低⾳),由“频率”(frequency)决定,频率越⾼⾳调越⾼。
⾳⾊:⾳⾊是⼀种抽象的东西,波形决定了声⾳的⾳⾊。
声⾳因不同发声物体材料⽽具有不同特性,波形是把这个抽象特性直观的表现出来。
典型的⾳⾊波形有⽅波,锯齿波,正弦波,脉冲波等。
三⼤参数⾥除了⾳⾊没有度量单位外(可以认为⾳⾊是声⾳的UID,每种⾳⾊都是独⼀⽆⼆的),⾳量和⾳调均有度量单位,这意味着⾳量和⾳调是可调整的,也是声⾳之间可对⽐的特征参数。
1.1 ⾳量单位-分贝(dB) 声波是⼀种机械波(压⼒波)。
声波(空⽓质点)的连续振动,使空⽓分⼦不断交替的压缩和松弛,使⼤⽓压迅速产⽣起伏,这种⽓压的起伏部分,就称为声压。
声压的振幅表⽰质点离开平衡位置的距离,反映从波形波峰到波⾕的压⼒变化,以及波所携带的能量的多少。
声压值虽然可以反映⾳量⼤⼩,但⼈们⽇常⽣活中遇到的声⾳,若以声压值表⽰,变化范围⾮常⼤(达到六个数量级以上),并且⼈体听觉对声信号强弱刺激反应不是线形的,⽽是成对数⽐例关系。
wave文件格式以及代码
wave⽂件格式以及代码⼀、综述WAVE⽂件作为多媒体中使⽤的声波⽂件格式之⼀,它是以RIFF格式为标准的。
RIFF是英⽂Resource Interchange File Format的缩写,每个WAVE⽂件的头四个字节便是“RIFF”。
WAVE⽂件是由若⼲个Chunk组成的。
按照在⽂件中的出现位置包括:RIFF WAVEChunk, Format Chunk, Fact Chunk(可选), Data Chunk。
具体见下图:------------------------------------------------| RIFF WAVE Chunk | ID = 'RIFF' | RiffType = 'WAVE'------------------------------------------------| Format Chunk| ID = 'fmt '------------------------------------------------| Fact Chunk(optional)| ID = 'fact'------------------------------------------------| Data Chunk| ID = 'data'------------------------------------------------图1 Wav格式包含Chunk⽰例其中除了Fact Chunk外,其他三个Chunk是必须的。
每个Chunk有各⾃的ID,位于Chunk最开始位置,作为标⽰,⽽且均为4个字节。
并且紧跟在ID后⾯的是Chunk⼤⼩(去除ID和Size所占的字节数后剩下的其他字节数⽬),4个字节表⽰,低字节表⽰数值低位,⾼字节表⽰数值⾼位。
下⾯具体介绍各个Chunk内容。
Wave文件格式解析
Wave文件是用于多媒体文件存储的Microsoft RIFF(Resource Interchange File Format 资源交换档案标准)规范的子集之一。
一个RIFF文件以一个文件头(File Header)开始,接着是一系列数据块(data chunk)。
一个Wave文件常常是一个带有一个单“WAVE”块的RIFF文件。
该“WAVE”chunk由两个子快组成,一个“fmt”chunk用于详细说明数据格式,一个“data”chunk包含实际的样本数据。
这种形式我们称为规范形式。
下面我们看一个具体的例子,声音文件如下:
52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00
22 56 00 00 88 58 01 00 04 00 10 00 64 61 74 61 00 08 00 00 00 00 00 00
24 17 1e f3 3c 13 3c 14 16 f9 18 f9 34 e7 23 a6 3c f2 24 f2 11 ce 1a 0d
上图所示例子,该WAVE文件采用PCM编码。
该音频具有双声道,每个样点进行16位量化编码,双声道的一个样点占4字节,存储顺序是每个样点的左右声道交替存储。
对于Data块,根据声道数和采样率的不同情况,布局如下(每列代表8bits):1、8 Bit 单声道:
2、8 Bit 双声道
3、16 Bit 单声道:
4、16 Bit 双声道。
wav格式结构
W A V实际上是Waveform Audio File Format(波形音频文件格式)的简称,它是微软公司开发的一种声音文件格式。
W A V实际上是对PCM格式的的一种包装,W A V取样频率可以是44100Hz、22050Hz、11025Hz等,量化位数可以8位或16位,声道数可以是单声道,也可以是立体声。
W A V文件包含了一个“fmt ”段落和一个“data”段落,“fmt”段落包含了音源样本的参数信息,“data”段落包含了实际的音源数据。
在W A V文件中,“fmt”段通常包含以下信息:1. 格式说明标志位(Subchunk1ID):4个字节,等于“fmt ”或者“wFormatTag”。
2. 格式说明标志位长度(Subchunk1Size):4个字节,等于16或者所使用的单声道位数与有关设置的乘积加上2。
3. 音频流的通道数(nChannels):2个字节,表示每个声道的样本数。
4. 每秒的采样数(nSamplesPerSec):4个字节,表示每秒的采样频率。
5. 采样点振幅位数(nAvgBytesPerSec):4个字节,等于每秒发送字节数,这是nChannels和nSamplesPerSec的乘积的两倍加一再除以8的结果。
6. 音频流码的位深度(nBlockAlign):2个字节,等于nChannels 和nAvgBytesPerSec的乘积除以8的结果。
7. 总采样点数(wNumBlocks):2个字节,等于采样点数。
8. 格式说明标志位(Subchunk2ID):4个字节,等于“data”。
9. 格式说明标志位长度(Subchunk2Size):4个字节,等于采样点数乘以nChannels再乘以nAvgBytesPerSec除以8的结果。
以上信息仅供参考,如需了解更多信息,建议咨询专业人士。
PCM文件格式简介
PCM文件格式简介分类:音频处理2007-12-12 09:29 3008人阅读评论(3) 收藏举报PCM文件:模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志。
Windows的Convert工具可以把PCM音频格式的文件转换成Microsoft的WAV格式的文件。
将音频数字化,其实就是将声音数字化。
最常见的方式是透过脉冲编码调制PCM(Pulse Code Modulation) 。
运作原理如下。
首先我们考虑声音经过麦克风,转换成一连串电压变化的信号,如图一所示。
这张图的横座标为秒,纵座标为电压大小。
要将这样的信号转为PCM 格式的方法,是使用三个参数来表示声音,它们是:声道数、采样位数和采样频率。
采样频率:即取样频率,指每秒钟取得声音样本的次数。
采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。
由于人耳的分辨率很有限,太高的频率并不能分辨出来。
在16位声卡中有22KHz、44KHz等几级,其中,22KHz相当于普通FM广播的音质,44KHz已相当于CD音质了,目前的常用采样频率都不超过48KHz。
采样位数:即采样值或取样值(就是将采样样本幅度量化)。
它是用来衡量声音波动变化的一个参数,也可以说是声卡的分辨率。
它的数值越大,分辨率也就越高,所发出声音的能力越强。
声道数:很好理解,有单声道和立体声之分,单声道的声音只能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声的pcm可以使两个喇叭都发声(一般左右声道有分工),更能感受到空间效果。
下面再用图解来看看采样位数和采样频率的概念。
让我们来看看这几幅图。
图中的黑色曲线表示的是pcm文件录制的自然界的声波,红色曲线表示的是pcm文件输出的声波,横坐标便是采样频率;纵坐标便是采样位数。
这几幅图中的格子从左到右,逐渐加密,先是加大横坐标的密度,然后加大纵坐标的密度。
C语言中的音频处理和音频编解码技术
C语言中的音频处理和音频编解码技术音频处理是计算机科学领域中的一个重要分支,它涉及到对音频信号进行捕获、处理、分析和合成等多个方面。
在C语言中,我们可以利用各种音频处理库和编程技术来实现音频处理功能。
本文将介绍C语言中常用的音频处理和编解码技术。
一、音频处理库1.1 WAV文件格式处理:WAV是一种常见的音频文件格式,它使用PCM编码来存储音频数据。
我们可以使用C语言中的音频处理库来读取、写入和处理WAV文件。
其中,libsndfile是一个强大的音频处理库,它提供了一系列的函数来访问和处理WAV文件。
1.2 FFT和频谱分析:FFT(快速傅里叶变换)是一种常用的数字信号处理算法,可以将时域的音频信号转换为频域的频谱分析。
在C语言中,我们可以利用开源的FFT库,如FFTW(快速傅里叶变换库),实现音频信号的频谱分析和处理。
1.3 滤波器设计和应用:在音频处理中,滤波器是一种常用的处理工具,它可以通过改变音频信号的频率响应来实现降噪、增强音频特定频率的功能。
在C语言中,我们可以使用数字滤波器设计库,如IIR和FIR滤波器设计库,来设计和应用各种类型的滤波器。
二、音频编解码技术2.1 压缩编码:音频编解码是将音频信号从原始数据压缩成更小的格式,以便于存储和传输。
目前最常用的音频编码格式包括MP3、AAC和OGG等。
在C语言中,我们可以利用音频编解码库,如libavcodec(FFmpeg)库,实现音频编解码功能。
2.2 编码器参数设置:音频编解码器通常具有许多参数,可以通过设置这些参数来调整编码和解码的质量和性能。
在C语言中,我们可以使用音频编解码库提供的API来设置编码器的参数,例如比特率、声道数、采样率等。
2.3 实时音频流处理:实时音频流处理是音频编解码的一种应用场景,它要求对实时音频数据进行解码和处理,并在实时性要求较高的场景下输出。
在C语言中,我们可以利用音频编解码库提供的API和技术,如缓冲队列、多线程编程等,实现实时音频流的处理和输出。
wav文件文件头格式
一、WAVE文件格式剖析WA VE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。
RIFF是英文ResourceInterchangeFileFormat的缩写,每个W A VE文件的头四个字节便是“RIFF”。
WA VE文件由文件头和数据体两大部分组成。
其中文件头又分为RIFF/WAV 文件标识段和声音数据格式说明段两部分。
W A VE文件各部分内容及格式见附表。
常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。
采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。
采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。
WA VE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。
W A VE文件是由样本组织而成的。
在单声道W A VE文件中,声道0代表左声道,声道1代表右声道。
在多声道W A VE文件中,样本是交替出现的。
WA VE文件格式说明表偏移地址字节数数据类型内容文件头00H4char"RIFF"标志04H4longint文件长度08H4char"WA VE"标志0CH4char"fmt"标志10H4过渡字节(不定)14H2int格式类别(10H为PCM形式的声音数据)16H2int通道数,单声道为1,双声道为218H2int采样率(每秒样本数),表示每个通道的播放速度,1CH4longint波形音频数据传送速率,其值为通道数×每秒数据位数×每样本的数据位数/8。
播放软件利用此值可以估计缓冲区的大小。
20H2int数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。
pcm编码方式与wave音频格式
1. 音频简介经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等.44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声);22050HZ 8bit mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道;当然也可以有 16bit 的单声道或 8bit 的立体声, 等等。
采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。
采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位(左声道)和低八位(右声道)分别代表两个声道。
人对频率的识别范围是 20HZ - 20000HZ, 如果每秒钟能对声音做 20000 个采样, 回放时就足可以满足人耳的需求. 所以 22050 的采样频率是常用的, 44100已是CD音质, 超过48000的采样对人耳已经没有意义。
这和电影的每秒 24 帧图片的道理差不多。
每个采样数据记录的是振幅, 采样精度取决于储存空间的大小:1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了;4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了.如果是双声道(stereo), 采样就是双份的, 文件也差不多要大一倍.这样我们就可以根据一个 wav 文件的大小、采样频率和采样大小估算出一个wav 文件的播放长度。
譬如 "Windows XP 启动.wav" 的文件长度是 424,644 字节, 它是"22050HZ / 16bit / 立体声" 格式(这可以从其 "属性->摘要" 里看到),那么它的每秒的传输速率(位速, 也叫比特率、取样率)是 22050*16*2 = 705600(bit/s), 换算成字节单位就是 705600/8 = 88200(字节/秒), 播放时间:424644(总字节数) / 88200(每秒字节数) ≈ 4.8145578(秒)。
常见音频文件格式简介
常见音频文件格式简介1.--MIDI(.MID)MIDI是乐器数字接口的英文缩写,是数字音乐/电子合成乐器国际标准。
MIDI文件有几个变通的格式,其中CMF文件是随声卡一起使用的音乐文件,于MIDI文件非常相似,只是文件头略有差别;另一种MIDI文件是WINDOWS使用的RIFF文件的一种子格式,称为RMID,扩展名为.RMI。
2.--WA VE(.W A V)由MICROSOFT公司开发的一种W A V声音文件格式,是如今电脑上最为常见的声音文件,他符合RIFF文件规范,用于保存WINDOWS平台的音频信息资源,被WINDOWS平台机器应用程序所广泛支持,W A VE格式支持MSADPCM、CCIPTALAW、CCIPT-LAW和其他压缩算法,支持多种音频位数,采样频率和声道,但其缺点是文件体积较大,所以不适合长时间纪录。
3.--MP1/.MP2/.MP3MPEG频文件根据压缩质量和编码复杂程度的不同可分为三层(MPEG AUDIO LAYER 1/2/3分别与MP1,MP2和MP3这三种声音文件相对应MPEG音频编码具有很高的压缩率,MP1和MP2 的压缩率分别为4:1和6:1--8:1,而MP3的压缩率则高达10:1--12:1。
目前INTERNET上的音乐格式以MP3最为常见。
MP3是一种有损压缩,但是它的最大优势是一极小的声音失真换来了较高的压缩比。
4.--.MP4MP3问世不久,就凭这较高的压缩比12:1和较好的音质创造了一个全新的音乐领域,然而MP3的开放性却最终不可避免的导致了版权之争,在这样的背景之下,文件更小,音质更佳,同时还能有效保护版权的MP4就应运而生了。
MP3和MP4之间其实并没有必然的联系,首先MP3是一种音频压缩的国际技术标准,而MP4确实一个商标的名称,其次,他采用的音频压缩技术也迥然不同,MP4采用的是美国电话电报公司所研发的,以“知觉编码”为关键技术的a2b音乐压缩技术可将压缩比成功的提高到15:1,最大可达到20;1而不影响音乐的实际听感,同时mp4在加密和授权方面也做了特别设计,它有如下特点:(1)每首mp4乐曲就是一个扩展名为.exe的可执行文件。
Wave文件格式
WAV简介WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1K的取样频率,16位量化数字,因此在声音文件质量和CD相差无几! WAV打开工具是WINDOWS的媒体播放器。
通常使用三个参数来表示声音,量化位数,取样频率和声道数。
声道有单声道和立体声之分,取样频率一般有11025Hz(11kHz) ,22050Hz(22kHz)和44100Hz(44kHz) 三种,不过尽管音质出色,但在压缩后的文件体积过大!相对其他音频格式而言是一个缺点,其文件大小的计算方式为:WAV格式文件所占容量 = (取样频率 X 量化位数 X 声道) X 时间 / 8 (字节 = 8bit)目前支持WAV设计的手机主要为智能手机,如索尼爱立信P910和诺基亚N90以及采用微软OS的多普达等手机,而其它一些非智能手机的产品,如果宣传支持WAV格式则多半属于只是支持单声道的。
WAV剖析WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为“WAV”,数据本身的格式为PCM或压缩型。
WAV文件格式是一种由微软和IBM联合开发的用于音频数字存储的标准,它采用RIFF文件格式结构,非常接近于AIFF和IFF格式。
符合 PIFF Resource Interchange File Format规范。
所有的WAV都有一个文件头,这个文件头音频流的编码参数。
WAV文件作为最经典的Windows多媒体音频格式,应用非常广泛,它使用三个参数来表示声音:采样位数、采样频率和声道数。
声道有单声道和立体声之分,采样频率一般有11025Hz(11kHz)、22050Hz(22kHz)和44100Hz(44kHz)三种。
WAV(PCM)文件格式分析
18H 2 int 采样率(每秒样本数),表示每个通道的播放速度,
1CH 4 long int 波形音频数据传送速率,其值为通道数×每秒数据位数×每 样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。
样本大小 数据格式 最大值 最小值
8位PCM unsigned int 225 0
16位PCM int 32767 -32767�
0CH 4 char "fmt"标志
10H 4 过渡字节(不定)
14H 2 int 格式类别(10H为PCM形式的声音数据)
W AVE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。WAVE文件是由样本组织而成的。在单声道WAVE文件中,声道0代表左声道,声道1代表右声道。在多声道WAVE文件中,样本是交替出现的。
WAVE文件格式说明表
偏移地址 字节数 数据类型 内 容
8位立体声 0声道(左) 1声道(右) 0声道(左) 1声道(右)
16位单声道 0声道低字节 0声道高字节 0声道低字节 0声道高字节
16位立体声 0声道(左)低字节 0声道(左)高字节 1声道(右)低字节 1声道(右)高字节
WAVE文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位的PCM波形样本的数据格式如下所示。
常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。
wave文件(.wav)格式、PCM数据格式
wave文件(*.wav)格式、PCM数据格式1. 音频简介经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等.44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声);22050HZ 8bit mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道;当然也可以有 16bit 的单声道或 8bit 的立体声, 等等。
采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。
采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位(左声道)和低八位(右声道)分别代表两个声道。
人对频率的识别范围是 20HZ - 20000HZ, 如果每秒钟能对声音做 20000 个采样, 回放时就足可以满足人耳的需求. 所以 22050 的采样频率是常用的, 44100已是CD音质, 超过48000的采样对人耳已经没有意义。
这和电影的每秒 24 帧图片的道理差不多。
每个采样数据记录的是振幅, 采样精度取决于储存空间的大小:1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了;4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了.如果是双声道(stereo), 采样就是双份的, 文件也差不多要大一倍.这样我们就可以根据一个 wav 文件的大小、采样频率和采样大小估算出一个wav 文件的播放长度。
譬如 "Windows XP 启动.wav" 的文件长度是 424,644 字节, 它是"22050HZ / 16bit / 立体声" 格式(这可以从其 "属性->摘要" 里看到),那么它的每秒的传输速率(位速, 也叫比特率、取样率)是 22050*16*2 = 705600(bit/s), 换算成字节单位就是 705600/8 = 88200(字节/秒), 播放时间:424644(总字节数) / 88200(每秒字节数) ≈ 4.8145578(秒)。
如何选择适合你的电脑音频采样格式
如何选择适合你的电脑音频采样格式电脑音频在今天的数字时代扮演着至关重要的角色。
无论是制作音乐、编辑视频还是进行语音通信,选择适合你的电脑音频采样格式都是至关重要的。
本文将为你介绍不同的音频采样格式,并探讨如何选择适合你的电脑音频采样格式。
第一部分:常见的电脑音频采样格式1. WAV格式(Waveform Audio File Format)WAV格式是一种无损音频文件格式,它可以保存高质量的音频数据。
WAV格式通常被用于音乐制作、专业录音和音频编辑等领域。
它支持多种采样率和比特率,因此可以灵活地满足不同的需求。
2. MP3格式(MPEG Audio Layer-3)MP3格式是一种有损音频文件格式,它可以显著地减小文件大小而不明显损失音质。
MP3格式广泛应用于音乐播放器、移动设备和在线音乐平台等场景。
如果你希望在带宽有限或存储空间有限的情况下平衡音质和文件大小,MP3格式是一个不错的选择。
3. AAC格式(Advanced Audio Coding)AAC格式是一种有损音频文件格式,它在MP3格式的基础上进一步提升了音质和压缩效率。
AAC格式通常用于在线音乐流媒体服务和移动通信领域。
如果你追求高音质且有限制的带宽和存储空间,AAC 格式是一个值得考虑的选项。
第二部分:选择适合你的电脑音频采样格式的因素1. 音质要求如果你是一个专业音乐制作人或者是对音质要求较高的用户,那么WAV格式可能是你的首选。
它提供了最高质量的音频数据,但相应地就会占用更多的存储空间。
如果你对音质要求不太严格,那么MP3或AAC格式就可以满足你的需求。
2. 存储空间和带宽如果你的电脑存储空间有限,或者你希望通过互联网传输音频文件时减小文件大小,那么有损音频格式如MP3或AAC可能更适合你。
它们可以在一定程度上减小文件大小,同时保持相对较好的音质。
如果你有足够的存储空间和带宽,那么无损音频格式如WAV可能是更好的选择。
3. 设备兼容性在选择适合你的电脑音频采样格式时,还要考虑你的设备和应用程序的兼容性。
WAVE文件头信息以及PCM数据的读取(C++版本)
WAVE文件头信息以及PCM数据的读取(C++版本)WA VE文件头信息以及PCM数据的读取/*************文件的处理方法**************/#include "math.h"#includeusing namespace std;#define N 200 //观察前面的200点的PCM数据float *Read_Data(FILE *fp_speech,int front_info);//读取PCM 数据的关键函数int main(){FILE *fp;fp=fopen("E:\\aaa.wav","rb");//为读,打开一个wav文件if((fp=fopen(""E:\\aaa.wav"","rb"))==NULL) //若打开文件失败,退出{printf("can't open this file\n");exit(0);}/*********RIFF WA VE Chunk的输出*********//****************************************RIFF WAVE Chunk==================================| |所占字节数| 具体内容|==================================| ID | 4 Bytes | 'RIFF' |----------------------------------| Size | 4 Bytes | |----------------------------------| Type | 4 Bytes | 'WA VE' |******************************************/char id_RIFF[4],type_RIFF[4];int size_RIFF;cout<<endl<<"riff "<<endl;<="" chunk的输出:="" p="" ve="" wa="">//读取ID=RIFF 4字节fseek(fp,0L,0);fread(id_RIFF,sizeof(int),1,fp);cout<<"RIFF标识:"<<id_riff[0]<<id_riff[1]<<id_riff[2]<<id_riff[3]<<endl;< p=""> //读取文件大小4字节fseek(fp,4L,0);fread(&size_RIFF,sizeof(int),1,fp);cout<<"文件大小:"<<size_riff<<endl;< p="">//读取W AVE标识4字节fseek(fp,8L,0);fread(type_RIFF,sizeof(int),1,fp);cout<<"WA VE标识:"<<type_riff[0]<<type_riff[1]<<type_riff[2]<<type_riff[3]<<endl ;< p="">/*******Format Chunk的输出*******//****************************************Format Chunk====================================== ============================ ==| | 字节数| 具体内容|====================================== ============================ ==| ID | 4 Bytes | 'fmt ' |--------------------------------------------------------------------| Size | 4 Bytes | 数值为16或18,18则最后有附加信息|-------------------------------------------------------------------- ----| FormatTag | 2 Bytes | 编码方式,一般为0x0001 | |-------------------------------------------------------------------- || Channels | 2 Bytes | 声道数目,1--单声道;2--双声道| |-------------------------------------------------------------------- || SamplesPerSec | 4 Bytes | 采样频率| |-------------------------------------------------------------------- || AvgBytesPerSec| 4 Bytes | 每秒所需字节数| |===> W AVE_FORMA T -------------------------------------------------------------------- || BlockAlign | 2 Bytes | 数据块对齐单位(每个采样需要的字节数) | |-------------------------------------------------------------------- || BitsPerSample | 2 Bytes | 每个采样需要的bit数| |-------------------------------------------------------------------- || | 2 Bytes | 附加信息(可选,通过Size来判断有无)| |-------------------------------------------------------------------- ----******************************************/char id_FORMA T[4];int size_FORMA T,SamplesPerSec,AvgBytesPerSec;short int FormatTag,Channels,BlockAlign,BitsPerSample,addinfo;cout<<endl<<"format "<<endl;<="" chunk的输出:="" p=""> //读取famt标识4字节fseek(fp,12L,0);fread(id_FORMA T,sizeof(int),1,fp);cout<<"fmt标识:"<<id_format[0]<<id_format[1]<<id_format[2]<<endl;< p=""> //读取size 4字节//fseek(fp,16L,0);//fread(&id_FORMA T,sizeof(int),1,fp);//cout<<"size大小:"<<<endl;<="">//编码方式2字节fseek(fp,20L,0);fread(&FormatTag,sizeof(short),1,fp);cout<<"编码方式:"<<formattag<<endl;< p="">//声道数2字节fseek(fp,22L,0);fread(&Channels,sizeof(short),1,fp);cout<<"声道数目:"<<channels<<endl;< p="">//采样频率4字节fseek(fp,24L,0);fread(&SamplesPerSec,sizeof(int),1,fp);cout<<"采样频率:"<<samplespersec<<endl;< p="">//每秒所需字节数4字节fseek(fp,28L,0);fread(&AvgBytesPerSec,sizeof(int),1,fp);cout<<"每秒所需字节数:"<<avgbytespersec<<endl;< p=""> //数据块对齐单位2字节fseek(fp,32L,0);fread(&BlockAlign,sizeof(short),1,fp);cout<<"数据块对齐单位:"<<blockalign<<endl;< p="">//每个采样需要的bit数2字节fseek(fp,34L,0);fread(&BitsPerSample,sizeof(short),1,fp);cout<<"每个采样需要的bit数:"<<bitspersample<<endl;< p="">//附加信息2字节fseek(fp,36L,0);fread(&addinfo,sizeof(short),1,fp);cout<<"附加信息:"<<addinfo<<endl;< p="">/*******Fact Chunk的输出*******//****************************************Fact Chunk==================================| |所占字节数| 具体内容|==================================| ID | 4 Bytes | 'fact' |----------------------------------| Size | 4 Bytes | 数值为4 |----------------------------------| data | 4 Bytes | |----------------------------------******************************************/char index;char id_FACT[4];int size_FACT,data_FACT;/*******Data Chunk的输出*******//****************************************Data Chunk==================================| |所占字节数| 具体内容|==================================| ID | 4 Bytes | 'data' |----------------------------------| Size | 4 Bytes | |----------------------------------| data | | |----------------------------------******************************************/char id_DATA[4];int size_DATA;float *PCMdata;//检验标识的第一个字符,判断是否存在Fact Chunk信息段,如果没有就直接输出Data 段fseek(fp,38L,0);fread(&index,sizeof(char),1,fp);if (index=='f')cout<<endl<<"fact "<<endl;<="" chunk的输出:="" p=""> //FACT标识4字节fseek(fp,38L,0);fread(&id_FACT,sizeof(int),1,fp);cout<<"FACT标识:"<<id_fact[0]<<id_fact[1]<<id_fact[2]<<id_fact[3]<<endl;<p="">//size大小4字节fseek(fp,42L,0);fread(&size_FACT,sizeof(int),1,fp);cout<<"size大小:"<<size_fact<<endl;< p="">//FACT段data 2字节fseek(fp,46L,0);fread(&data_FACT,sizeof(int),1,fp);cout<<"FACT段data:"<<data_fact<<endl;< p="">/************Data Chunk的输出***************/cout<<endl<<"data "<<endl;<="" chunk的输出:="" p=""> //DATA标识4字节fseek(fp,50L,0);fread(&id_DATA,sizeof(int),1,fp);cout<<"DATA标识:"<<id_data<<endl;< p="">//PCM数据长度4字节fseek(fp,54L,0);fread(&size_DATA,sizeof(int),1,fp);cout<<"PCM数据长度:"<<size_data<<endl;< p="">/*******以下为重要的PCM数据输出*******/fseek(fp,46L,0);PCMdata=Read_Data(fp,46);cout<<"PCM数据:"<<endl;< p="">for (int i=0;i<n;i++)< p="">{cout<<pcmdata[i]<<" ";<="" p="">if((i+1)%5==0)cout<<endl;< p="">}}if (index=='d') //为真,则为只存在data数据段cout<<endl<<"data "<<endl;<="" chunk的输出:="" p=""> //DATA标识4字节fseek(fp,38L,0);fread(&id_DATA,sizeof(int),1,fp);cout<<"DATA标识:"<<id_data[0]<<<id_data[2]<<id_data[3]<<endl;<=""> //PCM数据长度4字节fseek(fp,42L,0);fread(&size_DATA,sizeof(int),1,fp);cout<<"PCM数据长度:"<<size_data<<endl;< p="">/*******以下为重要的PCM数据输出*******/fseek(fp,46L,0);PCMdata=Read_Data(fp,46);cout<<"PCM数据:"<<endl;< p="">for (int i=0;i<n;i++)< p="">{cout<<pcmdata[i]<<" ";<="" p="">if((i+1)%5==0)cout<<endl;< p="">}}fclose(fp);return 0;}float *Read_Data(FILE *fp_speech,int front_info){short data; //为什么用short?参看文献中的相应wav文件的pcm数据存放格式。
波形文件的后缀
波形文件的后缀
波形文件的常见后缀有:
1. .wav - WAV(Waveform Audio File Format)是一种常见的
无损音频压缩格式,多用于Windows操作系统。
2. .mp3 - MP3(MPEG Audio Layer III)是一种常见的有损音
频压缩格式,可以在各种播放器和设备上播放。
3. .aiff/.aif - AIFF(Audio Interchange File Format)是苹果公司
开发的一种无损音频压缩格式,常用于Mac OS系统。
4. .flac - FLAC(Free Lossless Audio Codec)是一种无损音频
压缩格式,提供与原始音频文件一样的音质,但文件大小更小。
5. .ogg - OGG(Ogg Vorbis)是一种开放、自由的有损音频压
缩格式,广泛应用于音频流媒体和游戏中。
6. .mp4 - MP4(MPEG-4 Part 14)是一种多媒体容器格式,可
以同时存放音频、视频、字幕等信息。
这些后缀在波形编辑、音乐制作和音频处理软件中经常使用。
文件格式
2.图像信息
图像文件主要有以下几种格式 : • BMP(*.bmp)不采用其他任何压缩,文件所 占用的空间很大。
• • • • •
GIF(*.gif) JPEG(*.jpg) PSD(*.psd) PNG(*.png) ICO图标
3. 视频信息
(1)影像视频 AVI(audio video interleaved):音频视频交错格式。 MOV(*.mov):美国Apple公司开发的一种视频格式,默 认的播放器 是苹果公司的QuickTime Player。 MPEG(Moving Picture Expert Group)运动图像专家 组格式,家里常看的VCD、SVCD、DVD就是这种格式。 (2)常用视频格式
பைடு நூலகம்
RMVB,RM,AVI,ASF,3GP,MP4,WMV ,SWF
常见文件格式
• • • • 1、声音文件 2、图像文件 3、视频文件 文本文件:txt WORD文件:DOC 电子表 格文件:XLS • 可执行文件:exe .bat • 网页文件.html.htm.asp.aspx.php 等等等等
1.声音信息
脉冲编码调制(PCM)和数字式音乐光盘(CD-DA)两种。 几种存储声音信息的文件格式:
wav文件文件头格式
一、WAVE文件格式剖析WA VE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。
RIFF是英文ResourceInterchangeFileFormat的缩写,每个W A VE文件的头四个字节便是“RIFF”。
WA VE文件由文件头和数据体两大部分组成。
其中文件头又分为RIFF/WAV 文件标识段和声音数据格式说明段两部分。
W A VE文件各部分内容及格式见附表。
常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。
采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。
采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。
WA VE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。
W A VE文件是由样本组织而成的。
在单声道W A VE文件中,声道0代表左声道,声道1代表右声道。
在多声道W A VE文件中,样本是交替出现的。
WA VE文件格式说明表偏移地址字节数数据类型内容文件头00H4char"RIFF"标志04H4longint文件长度08H4char"WA VE"标志0CH4char"fmt"标志10H4过渡字节(不定)14H2int格式类别(10H为PCM形式的声音数据)16H2int通道数,单声道为1,双声道为218H2int采样率(每秒样本数),表示每个通道的播放速度,1CH4longint波形音频数据传送速率,其值为通道数×每秒数据位数×每样本的数据位数/8。
播放软件利用此值可以估计缓冲区的大小。
20H2int数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。
各种WAVE文件头格式
表18KHz采样、16比特量化的线性PCM语音信号的WAVE文件头格式表(共44字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 10 00 00 00H(PCM) long int size1=0x1014H 2 int 01 00H int fmttag=0x0116H 2 int int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=声道数*量化数/822H 2 int 量化数int bitpersamples=8或1624H 4 char "data" char data_id="data"28H 4 long int 采样数据字节数long int size2=文长-442CH 到文尾char 采样数据表28KHz采样、8比特A律量化的PCM语音信号的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(ALAW) long int size1=0x1214H 2 int 06 00H int fmttag=0x0616H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x0122H 4 long int 量化数long int bitpersamples=826H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000000530700H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-58表38KHz采样、8比特U律量化的PCM语音信号的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(ULAW) long int size1=0x1214H 2 int 07 00H int fmttag=0x0716H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x0122H 4 long int 量化数long int bitpersamples=826H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000000530700H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-58表4ADPCM语音编码后的WAVE文件头格式表(共90字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 32000000H(ADPCM) long int size1=0x3214H 2 int 02 00H int fmttag=0x0216H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=声道数*量化数/8 22H 2 int 量化数int bitpersamples=424H 34 char 固定字节char temp146H 4 char "fact" char wave_fact="fact"4AH 8 char 0400000004930600H定char temp252H 4 char "data" char wave_data="data"56H 4 long int 采样数据字节数lont int size2=文长-905AH 到文尾采样数据表5GSM语音编码后的WAVE文件头格式表(共60字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 14000000H(GSM) long int size1=0x1414H 2 int 31 00H int fmttag=0x3116H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 8 char 4100000002004001H定char temp128H 8 char 6661637404000000H定char temp230H 4 char 40 E2 05 00H定char temp334H 4 char "data" char wave_data="data"38H 4 long int 采样数据字节数lont int size2=文长-603CH 到文尾采样数据表6SBC语音编码后的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(SBC) long int size1=0x1214H 2 int 71 00H int fmttag=0x7116H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x2522H 4 long int 量化数long int bitpersamples=1626H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000076280400H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-59表7CELP语音编码后的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(CELP) long int size1=0x1214H 2 int 70 00H int fmttag=0x7016H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x0C22H 4 long int 量化数long int bitpersamples=1626H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000060520700H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-58WAVEFORMATEXtypedef struct{WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX;具体参数解释如下:wFormatTag:波形数据的格式,定义在MMREG.H文件中nChannels:波形数据的通道数:单声道或立体声nSamplesPerSec:采样率,对于PCM格式的波形数据,采样率有8.0 kHz,11.025kHz,22.05 kHz,44.1 kHz等nAvgBytesPerSec:数据率,对于PCM格式的波形数据,数据率等于采样率乘以每样点字节数nBlockAlign:每个样点字节数wBitsPerSample:采样精度,对于PCM格式的波形数据,采样精度为8或16cbSize:附加格式信息的数据块大小概念2、定义设备头结构WAVEHDR定义了指向波形数据缓冲区的设备头。
音频格式PCM数据简介
音频格式PCM数据简介1. 音频简介经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等.44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声);22050HZ 8bit mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道;当然也可以有 16bit 的单声道或 8bit 的立体声, 等等。
采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。
采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位(左声道)和低八位(右声道)分别代表两个声道。
人对频率的识别范围是 20HZ - 20000HZ, 如果每秒钟能对声音做20000 个采样, 回放时就足可以满足人耳的需求. 所以 22050 的采样频率是常用的, 44100已是CD音质, 超过48000的采样对人耳已经没有意义。
这和电影的每秒 24 帧图片的道理差不多。
每个采样数据记录的是振幅, 采样精度取决于储存空间的大小:1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成256 个等级;2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了;4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了.如果是双声道(stereo), 采样就是双份的, 文件也差不多要大一倍.这样我们就可以根据一个wav 文件的大小、采样频率和采样大小估算出一个 wav 文件的播放长度。
譬如 "Windows XP 启动.wav" 的文件长度是 424,644 字节, 它是"22050HZ / 16bit / 立体声" 格式(这可以从其 "属性->摘要" 里看到), 那么它的每秒的传输速率(位速, 也叫比特率、取样率)是22050*16*2 = 705600(bit/s), 换算成字节单位就是705600/8 = 88200(字节/秒),播放时间:424644(总字节数) / 88200(每秒字节数) ≈ 4.8145578(秒)。
wav文件格式详解
WAV (Waveform audio format )是微软与IBM 公司所开发的一种声音编码格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows 平台的音频信息资源,被Windows 平台及其应用程序所广泛支持,也是其音乐发烧友中常用的指定规格之一。
由于此音频格式未经过压缩,所以在音质方面不会出现失真的情况,但档案的体积因而在众多音频格式中较为大。
该格式支持多种音频数字,取样频率和声道,标准格式化的WAV 文件和CD 格式一样,也是44.1K 的取样频率,16位量化数字,因此在声音文件质量和CD 相差无几! WAV 打开工具是WINDOWS 的媒体播放器。
每个WAVE 文件的头四个字节便是“RIFF”。
WAVE 文件由文件头和数据体两大部分组成。
其中文件头又分为RIFF /WAV 文件标识段和声音数据格式说明段两部分。
WAVE 文件各部分内容及格式见下表。
文件头声音数据块偏移地址 字节数 类型 内容24H~27H 4 字符 数据标志符(data ) 28H~2BH 4 长整型 采样数据总数 2CH......采样数据示例下图是用UltraEdit 打开的wav 文件的部分截图偏移地址 字节数 类型 内容00H~03H 4 字符 资源交换文件标志(RIFF ) 04H~07H 4 长整数 从下个地址开始到文件尾的总字节数 08H~0BH 4 字符 WAV 文件标志(WAVE ) 0CH~0FH 4 字符 波形格式标志(FMT )10H~13H 4 整数 过滤字节(一般为00000010H )14H~15H 2 整数 格式种类(值为1时,表示数据为线性PCM 编码)16H~17H 2 整数 通道数,单声道为1,双声音为2 18H~1BH 4 长整数 采样频率1CH~1FH 4 长整数 波形数据传输速率(每秒平均字节数) 20H~21H 2 整数 数据的调整数(按字节计算) 22H~23H2整数样本数据位数此段W A V文件是使用window自带的录音机软件完成,生成的16进制文件内容,采用用的是小段存放格式(高地址存储高位,低地址存储低位)按字节存储(8bit)补充头文件样例说明:(1)“52 49 46 46”这个是Ascii字符“RIFF”,这部分是固定格式,表明这是一个WAVE 文件头。