wav 声音文件介绍
wav格式「wav格式的音频一般占用存储空间较大」

wav格式「wav格式的音频一般占用存储空间较大」WAV是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真但WAV文件有一个致命的缺点,就是它所占用的磁盘空间太大每分钟的音。
WAV格式是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持WAV 格式支持许多压缩算法,支持多种音频位数采样频率和声道,采用441kHz的采样频率,16位量化位数。
WAV是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真但WAV文件有一个致命的缺点,就是它所占用的磁盘空间太大每分钟的。
WAV格式视频文件是比较常见的格式,用Windows自带播放器就可以进行播放了1找到WAV格式视频2鼠标右键点击WAV格式视频,然后选择打开方式3点击打开方式之后,选择WindowsMediaPlayer进行打开4选择WindowsMediaPlayer之后。
Hz四种WAV文件采用的是RIFF格式结构至少是由3个块构成,分别是RIFFfmt和Data所有基于压缩编码的WAV文件必须含有fact块此外所有其它块都是可选。
WAV是真正的无损格式 WAV为微软公司Microsoft开发的一种声音文件格式,它符合RIFFResource Interchange File Format文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM。
wav是完全无损的非压缩音频格式,容量比较大,很多电子播放设备不支持,你可以将它转换成mp3wma格式就可以了我一般用cooledit 转换。
一首3分钟左右的音乐文件在30M至50M之间其后期可经无损压缩为APE,FLAC等无损格式,也可压为MP3,AAC,wma等有损格式有些手机,MP3等录音文件也为wav,但那是低端的,文件一般很小不是以上所说的无损音频。
多媒体音频格式解析WMA WAV OGG AAC APE FLAC

多媒体音频格式解析WMA WA V OGG AAC APE FLAC[转载] 收藏首先博士像先讲一讲何谓“真人真唱”铃声--我们有时候会看到,手机说明明明写着真人真唱,而且手机的营业员也这么说,我们很高兴买回去后,发现却不能播放MP3!其实,这是因为了解不足所产生的误会,所谓的真人真唱,通常指的是使用日AMAHA声音芯片的手机,使用MMF可以有短暂的人声和动物声的逼真模拟,而并不是专指MP3,而且不只MP3能支持唱整首歌,WA V、AAC、WMA等很多种文件格式也支持。
首先博士像先讲一讲何谓“真人真唱”铃声--我们有时候会看到,手机说明明明写着真人真唱,而且手机的营业员也这么说,我们很高兴买回去后,发现却不能播放MP3!其实,这是因为了解不足所产生的误会,所谓的真人真唱,通常指的是使用日AMAHA声音芯片的手机,使用MMF可以有短暂的人声和动物声的逼真模拟,而并不是专指MP3,而且不只MP3能支持唱整首歌,WAV、AAC、WMA等很多种文件格式也支持。
MP3:MP3是利用一种音频压缩技术,由于这种压缩方式的全称叫MPEG Audio Layer3,所以人们把它简称为MP3。
因为人耳只能听到一定频段内的声音,而其他更高或更低频率的声音对人耳是没有用处的,所以MP3技术就把这部分声音去掉了,从而使得文件体积大为缩小,但在人耳听起来却并没有什么失真。
MP3可以将声音用1∶10甚至1∶12的压缩率进行压缩,举个例子一般来说一张光碟容量为650M,作为CD它能容纳的不过是60到90分钟的音乐(15 首左右的歌曲),一首5分钟的歌曲要占用50M左右的空间,而一首5分钟的MP3歌曲体积只有4~5M,一张光碟能放上一百多收首MP3歌曲。
MP3的体积小,音质却非常接近CD,是一种很不错的音乐文件格式。
单音铃声:九十年代中后期,随着移动通讯由模拟网络发展到数字网络,音乐铃声开始出现了,这种铃声是通过专用的“可编程铃声电路”产生音乐信号,再通过扬声器或听筒来发出音乐的,但这种铃声虽然有音调的变化,但无法表现出自然界声音的音色和发音过程,因而无法模拟出乐器的真实效果。
常用音频格式介绍

常用音频格式介绍WAV APE FLAC WMA OGG MP3WAV格式WAV格式是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持。
WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz的采样频率,16位量化位数,因此WAV的音质与CD相差无几,但WAV格式对存储空间需求太大不便于交流和传播.WAV来源于对声音模拟波形的采样。
用不同的采样频率对声音的模拟波形进行采样可以得到一系列离散的采样点,以不同的量化位数(8位或16位)把这些采样点的值转换成二进制数,然后存入磁盘,这就产生了声音的WAV文件,即波形文件。
Microsoft Sound System软件Sound Finder可以转换AIF SND和VOD文件到WAV格式。
该格式记录声音的波形,故只要采样率高、采样字节长、机器速度快,利用该格式记录的声音文件能够和原声基本一致,质量非常高,但这样做的代价就是文件太大。
APE格式APE的本质,其实它是一种无损压缩音频格式。
庞大的WAV音频文件可以通过Monkey''sAudio这个软件进行“瘦身”压缩为APE。
很时候它被用做网络音频文件传输,因为被压缩后的APE文件容量要比WAV源文件小一半多,可以节约传输所用的时间。
更重要的是,通过Monkey''s Audio解压缩还原以后得到的WAV文件可以做到与压缩前的源文件完全一致。
所以APE被誉为“无损音频压缩格式”,Monkey''s Audio被誉为“无损音频压缩软件”。
与采用WinZip或者WinRAR这类专业数据压缩软件来压缩音频文件不同,压缩之后的APE音频文件是可以直接被播放的。
Monkey''s Audio会向Winamp中安装“in_APE.dll”插件,从而使Winamp也具备播放APE文件的能力。
C#使用NAudio合并mp3、wav音频文件

C#使⽤NAudio合并mp3、wav⾳频⽂件1.什么是wav格式WAV为(Microsoft)开发的⼀种声⾳⽂件格式,它符合RIFF(Resource Interchange File Format)⽂件规范,⽤于保存Windows平台的信息资源。
通常使⽤三个参数来表⽰声⾳,量化位数,取样频率和振幅。
量化位数分为8位,16位,24位三种,声道有单声道和之分,单声道振幅数据为n*1矩阵点,⽴体声为n*2矩阵点,取样频率⼀般有11025Hz(11kHz) ,22050Hz(22kHz)和44100Hz(44kHz) 三种。
标准格式化的WAV⽂件和CD格式⼀样,也是44.1K的取样频率,16位量化数字,因此在声⾳⽂件质量和CD相差⽆⼏。
2. WAV⽂件的组成偏移地址⼤⼩字节数据块类型内容00H~03H44字符资源交换⽂件标志(RIFF)04H~07H4长整数从下个地址开始到⽂件尾的总字节数08H~0BH44字符WAV⽂件标志(WAVE)0CH~0FH44字符波形格式标志(fmt ),最后⼀位空格。
10H~13H4整数过滤字节(⼀般为00000010H),若为00000012H则说明数据头携带附加信息(见“附加信息”)。
14H~15H2整数格式种类(值为1时,表⽰数据为线性PCM编码)16H~17H2整数通道数,单声道为1,双声道为218H~1BH4长整数采样频率1CH~1FH4长整数波形数据传输速率(每秒平均字节数)20H~21H2整数DATA数据块长度,字节。
22H~23H2整数PCM位宽随后2字节2整数附加信息(可选,由上⽅过滤字节确定)......................以上为对wav格式的基本了解,最近碰到⼀个需要合并⾳频⽂件的需求,奈何对此⽂件了解过少,最后借助于git地址:,结合⽂件流进⾏处理。
3.话不多说上代码。
⾸先是安装Naudio的包。
3.1.上传⾳频⽂件并调⽤合并⽅法【伪代码】public void UploadOrCombineAudioFile(){HttpFileCollection files = HttpContext.Current.Request.Files;if (files == null || files.Count < 1)return;string upfileType = HttpContext.Current.Request.Form["upfileType"];//⽂件格式类型/*...省略符...*/int maxSize = 1024 * 1024 * 100;//单⽂件上传最⼤限制List<string> dirDic = new List<string> { ".mp3", ".mp4", ".pcm", ".wav" };//⽂件格式限制string uploadPath = HttpContext.Current.Server.MapPath("~/AudioFile/TempFile/");//临时路径if (!Directory.Exists(uploadPath))Directory.CreateDirectory(uploadPath);string fileType = string.Empty;for (var i = 0; i < files.Count; i++){var postedfile = files[i];var inputStream = postedfile.InputStream;if (inputStream.Length > 0){string thisfileName = files[i].FileName;fileType = Path.GetExtension(thisfileName);if (postedfile.InputStream == null || postedfile.InputStream.Length > maxSize || !dirDic.Contains(fileType.ToLower()))return;/*...我是省略符...*/int ReadLen = 0;string uploadFileName = uploadPath + thisfileName;byte[] bytes = new byte[10240];using (FileStream stream = new FileStream(uploadFileName, FileMode.OpenOrCreate))//保存⽂件到指定待合并⽂件路径下{while ((ReadLen = inputStream.Read(bytes, 0, bytes.Length)) > 0){stream.Write(bytes, 0, ReadLen);}}}}List<string> filepaths = new List<string>(Directory.GetFiles(uploadPath));//获取待合并⽂件路径//⽂件合并后路径string savePath = HttpContext.Current.Server.MapPath("~/AudioFile/ComBineFile/" + DateTime.Now.ToString("yyyyMMdd") + "/"); if (!Directory.Exists(savePath))Directory.CreateDirectory(savePath);/*...我是省略符...*/byte[] buffer = new byte[10240];string savefullName = savePath + DateTime.Now.ToString("yyyyMMddHHmmssff") + upfileType;if (upfileType.ToLower().Equals(".mp3"))CombineMp3(filepaths, savefullName);//mp3合并else if ((upfileType.ToLower().Equals(".wav")))CombineWav(filepaths, savefullName);//wav合并/*...我是省略符...*/return;}3.2 .mp3格式合并//命名空间using System.IO;using NAudio;using NAudio.Wave;///<summary>/// Mp3格式合并///</summary>///<param name="inputFiles">待合并⽂件路径</param>///<param name="outputfullName">输出⽂件名</param>private void CombineMp3(List<string> inputFiles, string outputfullName){using (FileStream outputStream = new FileStream(outputfullName, FileMode.OpenOrCreate)){foreach (string file in inputFiles){Mp3FileReader reader = new Mp3FileReader(file);if ((outputStream.Position == 0) && (reader.Id3v2Tag != null)){outputStream.Write(reader.Id3v2Tag.RawData, 0, reader.Id3v2Tag.RawData.Length);}Mp3Frame frame;while ((frame = reader.ReadNextFrame()) != null){outputStream.Write(frame.RawData, 0, frame.RawData.Length);}}}}3.3.wav格式合并///<summary>/// wav格式合并///</summary>///<param name="inputFiles">待合并⽂件</param>///<param name="outputfullName">输出⽂件名</param>private void CombineWav(List<string> inputFiles, string outputfullName){WaveStream waveStream = WaveFormatConversionStream.CreatePcmStream(new WaveFileReader(inputFiles[0])); using (WaveFileWriter waveFileWriter = new WaveFileWriter(outputfullName, waveStream.WaveFormat)){foreach (string file in inputFiles){waveStream = WaveFormatConversionStream.CreatePcmStream(new WaveFileReader(file));byte[] bytes = new byte[waveStream.Length];waveStream.Position = 0;waveStream.Read(bytes, 0, (int)waveStream.Length); waveFileWriter.Write(bytes, 0, bytes.Length);}}}未完待续....。
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的结果。
以上信息仅供参考,如需了解更多信息,建议咨询专业人士。
计算机常用声音文件格式

计算机常用声音文件格式计算机中常用的声音文件格式有很多种,每种格式有其特定的用途和优势。
以下是一些常见的声音文件格式:1. WAV(Waveform Audio File Format):WAV 是一种无损音频文件格式,通常用于存储高质量的音频。
它支持多种音频编解码器,因此可以存储各种音频数据。
2. MP3(MPEG Audio Layer III):MP3 是一种有损音频压缩格式,它可以显著减小文件大小而保持相对较高的音质。
由于其高度的压缩率,MP3 是在线音乐和音频传输中广泛使用的格式。
3. AAC(Advanced Audio Coding):AAC 是一种有损音频编码标准,通常用于在相对较低的比特率下提供较高的音频质量。
它是许多音频和视频格式(例如MP4)的默认音频编码。
4. FLAC(Free Lossless Audio Codec):FLAC 是一种无损音频压缩格式,它可以保持原始音频质量而不损失任何数据。
FLAC 文件相对较大,但适用于对音质要求较高的场景,例如专业音乐制作。
5. OGG(Ogg Vorbis):OGG 是一个开放的、免费的多媒体容器格式,其中包括音频编码格式Vorbis。
OGG Vorbis 提供了一种有损的音频压缩方案,类似于MP3,但通常在相同比特率下提供更好的音质。
6. MIDI(Musical Instrument Digital Interface):MIDI 不是一种音频文件格式,而是一种包含音符、音量和乐器信息的数字音乐标准。
MIDI 文件很小,用于存储音符和乐器信息,而不是音频本身。
7. AIFF(Audio Interchange File Format):AIFF 是一种无损音频文件格式,常用于Mac平台。
与WAV类似,AIFF支持高质量音频数据。
这些格式的选择取决于具体的应用场景、存储需求、音频质量要求等因素。
例如,对于音乐制作和专业录音,无损格式如WAV、FLAC可能更为适用;而对于在线音乐流媒体,有损格式如MP3、AAC更为常见。
wav文件头详解,看懂wav文件

wav⽂件头详解,看懂wav⽂件⼯作中部门萌新常问的wav⽂件头格式及怎么看wav⽂件,且有时会遇到 “伪.pcm” 格式现总结如下: WAV是最常见的声⾳⽂件格式之⼀,是微软公司专门为Windows开发的⼀种标准数字⾳频⽂件,该⽂件能记录各种单声道或⽴体声的声⾳信息,并能保证声⾳不失真。
但WAV⽂件有⼀个缺点,就是它所占⽤的太⼤(每分钟的⾳乐⼤约需要12兆磁盘空间)。
它符合资源互换⽂件格式(RIFF)规范,⽤于保存Windows平台的⾳频信息资源推荐⼀个好⽤的16进制⽂件查看的⼯具:HxDx64对于完全0基础的,推荐下⾯⽹站中的详细解释,⽐较详细:(侵删)1.RIFF块(RIFF-Chunk)偏移地址字节数数据类型内容&H004String‘RIFF‘⽂件标志&H044UInteger⽂件总长&H08 4 String ‘WAVE‘⽂件标志2.格式化块(Format-Chunk)偏移地址字节数数据类型内容&H0C4String‘fmt‘标志&H104UInteger块长度&H12 2 UShort PCM格式类别&H142 UShort 声道数⽬&H184 UInteger 采样率&H1C 4 UInteger 传输速率&H1E 2UShort 数据块对齐&H202UShort 每样本bit数&H22 2UShort 可选3.附加块(Fact-Chunk) *当前块偏移地址需要根据实际数据变更偏移地址字节数数据类型内容&H264String‘fact‘标志&H2A4UInteger块长度&H2E4UInteger附加信息4.数据块(Data-Chunk) *当前块偏移地址需要根据实际数据变更偏移地址字节数数据类型内容&H324String‘data‘⽂件标志&H364UInteger数据块总长按照相关头格式,来观察字节即可Example:(取⾃上⾯博客)。
WAV文件的头信息

{
char cRiffFlag[4];
UIN32 nFileLen;
char cWaveFlag[4];
char cFmtFlag[4];
char cTransition[4];
UIN16 nFormatTag ;
UIN16 nChannels;
04H 4 long int 文件长度
08H 4 char "WAVE"#34;标志
10H 4 过渡字节(不定)
14H 2 int 格式类别(10H为PCM形式的声音数据)
16H 2 int 通道数,单声道为1,双声道为2
18H 2 int 采样率(每秒样本数),表示每个通道的播放速度, (Hz) sample frequency
UIN16 nSamplesPerSec;
UIN32 nAvgBytesperSec;
UIN16 nBlockAlign;
UIN16 nBitNumPerSample;
char cDataFlag[4];
UIN16 nAudioLength;
} WAVEFORMAT;
16位PCM int 32767 -32767
///////////////////////////////////////////////////////////////////////下面是常用来表示的数据结构
unsigned short tag; /* MS PCM = 1 */
1CH 4 long int 波形音频数据传送速率,其值为通道数×每秒样本数×每样本的数据位数(bit)/8。播放软件利用此值可以估计缓冲区的大小。
20H 2 int 数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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(秒)。
但是这还不够精确, 包装标准的 PCM 格式的 WAVE 文件(*.wav)中至少带有 42 个字节的头信息, 在计算播放时间时应该将其去掉,所以就有:(424644-42) / (22050*16*2/8) ≈ 4.8140816(秒). 这样就比较精确了.关于声音文件还有一个概念: "位速", 也有叫做比特率、取样率, 譬如上面文件的位速是705.6kbps 或 705600bps, 其中的 b 是 bit, ps是每秒的意思;压缩的音频文件常常用位速来表示, 譬如达到 CD 音质的 MP3 是: 128kbps / 44100HZ.2. wave文件格式2.1 概述WAVE文件是计算机领域最常用的数字化声音文件格式之一,它是微软专门为Windows系统定义的波形文件格式(Waveform Audio),由于其扩展名为"*.wav"。
WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为“WAV”,数据本身的格式为PCM或压缩型。
WAV文件格式是一种由微软和IBM联合开发的用于音频数字存储的标准,它采用RIFF文件格式结构,非常接近于AIFF和IFF格式。
符合 PIFF Resource Interchange File Format规范。
所有的WAV都有一个文件头,这个文件头音频流的编码参数。
WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。
| Data Chunk || ID = "data" |-------------------------------------------图 Wav格式包含Chunk示例Fact Chunk=======================================| |所占字节数| 具体内容 |=======================================| ID | 4Bytes | "fact" |---------------------------------------| Size | 4Bytes | 4 |---------------------------------------| data | 4Bytes |解压后的音频数据的大小(B)|---------------------------------------图 Fact Chunk2.3 Wave文件格式详细说明别名字节数类型注释ckid 4 char "RIFF" 标志, 大写cksize 4 int32 文件长度。
这个长度不包括"RIFF"标志和文件长度本身所占字节, 下面的子块大小也是这样。
fcc type 4 char "WAVE" 类型块标识, 大写。
ckid 4 char 表示"fmt" chunk的开始。
此块中包括文件内部格式信息。
小写, 最后一个字符是空格。
cksize 4 int32 文件内部格式信息数据的大小。
FormatTag 2 int16 音频数据的编码方式。
1 表示是 PCM 编码Channels 2 int16 声道数,单声道为1,双声道为2SamplesPerSec 4 int32 采样率(每秒样本数), 比如 44100 等 BytesPerSec 4 int32 音频数据传送速率, 单位是字节。
其值为采样率×每次采样大小。
播放软件利用此值可以估计缓冲区的大小。
BlockAlign 2 int16 每次采样的大小 = 采样精度*声道数/8(单位是字节); 这也是字节对齐的最小单位, 譬如 16bit 立体声在这里的值是 4 字节。
播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。
BitsPerSample 2 int16 每个声道的采样精度; 譬如 16bit 在这里的值就是16。
如果有多个声道,则每个声道的采样精度大小都一样的。
[cbsize] 2 int16 [可选]附加数据的大小。
[...] x[ckid] 4 char "fact".ckid 4 char 表示 "data" chunk的开始。
此块中包含音频数据。
小写。
cksize 4 int32 音频数据的长度...... 文件声音信息数据(真正声音存储部分)[......] 其它 chunk2.4 Windows平台上WAVEFORMAT结构的认识PCM和非PCM的主要区别是声音数据的组织不同,这些区别可以通过两者的WAVEFORMAT结构来区分。
下面以PCM和IMA-ADPCM来进行对比。
WAVE的基本结构 WAVEFORMATEX 结构定义如下:1typedef struct2{3WORD wFormatag; //编码格式,包括WAVE_FORMAT_PCM,WAVEFORMAT_ADPCM4WORD nChannls; //声道数,单声道为1,双声道为2;56DWORD nSamplesPerSec; //采样频率;78DWORD nAvgBytesperSec;//每秒的数据量;910WORD nBlockAlign; //块对齐;1112WORD wBitsPerSample; //WAVE文件的采样大小;1314WORD cbSize; // The count in bytes of the size of extra15// information(after cbSize). PCM中忽略此值16} WAVEFORMATEX;IMAADPCMWAVEFORMAT结构定义如下:1Typedef struct2{3WAVEFORMATEX wfmt;45WORD nSamplesPerBlock;67} IMAADPCMWAVEFORMAT;IMA-ADPCM中的的wfmt->cbsize不能忽略,一般取值为2,表示此类型的WAVEFORMAT 比一般的WAVEFORMAT多出2个字节。
这两个字符也就是nSamplesPerBlock。
"fact" chunk的内部组织在非PCM格式的文件中,一般会在WAVEFORMAT结构后面加入一个 "fact" chunk, 结构如下:view sourceprint?1 typedef struct{23 char[4]; //“fact”字符串45 DWORD chunksize;67 DWORD datafactsize; // 音频数据转换为PCM格式后的大小。
89 } factchunk;datafactsize是这个chunk中最重要的数据,如果这是某种压缩格式的声音文件,那么从这里就可以知道他解压缩后的大小。
对于解压时的计算会有很大的好处!2.5 "data" chunk的内部组织从 "data" chunk的第9个字节开始,存储的就是声音信息的数据了,(前八个字节存储的是标志符 "data" 和后接数据大小size(DWORD)。
这些数据可以是压缩的,也可以是没有压缩的。
3. PCM数据格式PCM(Pulse Code Modulation)也被称为脉码编码调制。
PCM中的声音数据没有被压缩,如果是单声道的文件,采样数据按时间的先后顺序依次存入。
(它的基本组织单位是BYTE(8bit)或WORD(16bit))一般情况下,一帧PCM是由2048次采样组成的( 参考/forum/showthread.php?129458-请问PCM格式的音频流,每次读入或输出的块的大小是必须固定为4096B么&s=e79e9dd1707157281e3725a163844c49 )。
Wave文件的格式非常混乱。
如果把wave文件的格式比作盆汤,毫无疑问有太多的厨师在完全未经协调的情况下,向这道汤里添加了太多的佐料。