因为我的公司需要设计到软件与硬件的通信,所以去年深入的研究了一下音频各种格式的转换,曾写过一篇简书,现在搬过来丰富下自己的博客。
-
<李> .amr:体积很小,1秒到约为1 kb,所以音质缩水也很厉害,一般用于手机铃声或彩信李>
<李>。mp3:比较流行的,有损音频,某些部分失真,,音质随码率的提高,越高越好李>
<李> . wav:为无损音频李>
<李> .pcm:无损的wav文件中音频数据的一种编码方式李>
由于应用程序是通过AVAudioRecorder录制音频,默认格式为pcm,文件比较大,所以不适合用于聊天通信的文件格式,所以最优的选择是转换成amr格式
<强> .pcm——祝辞。wav,祝辞。amr 强>
<强>)将pcm转成wav 强>
<强>什么是WAV和PCM ? 强>
WAV: WAV是一种无损的音频文件格式,WAV符合唏(资源交换文件格式)规范。所有的WAV都有一个文件头,这个文件头音频流的编码参数。WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。
PCM: PCM(脉冲编码调制——脉码调制录音)。所谓PCM录音就是将声音等模拟信号变成符号化的脉冲列,再予以记录.PCM信号是由[1],[0]等符号构成的数字信号,而未经过任何编码和压缩处理。与模拟信号比,它不易受传送系统的杂波及失真的影响。动态范围宽,可得到音质相当好的影响效果。
简单来说:wav是一种无损的音频文件格式,pcm是没有压缩的编码方式。
<强> WAV和PCM的关系强>
WAV可以使用多种音频编码来压缩其音频流,不过我们常见的都是音频流被PCM编码处理的WAV,但这不表示WAV只能使用PCM编码,MP3编码同样也可以运用在WAV中,和AVI一样,只要安装好了相应的解码,就可以欣赏这些WAV了。在Windows平台下,基于PCM编码的WAV是被支持得最好的音频格式,所有音频软件都能完美支持,由于本身可以达到较高的音质的要求,因此,WAV也是音乐编辑创作的首选格式,适合保存音乐素材。因此,基于PCM编码的WAV被作为了一种中介的格式,常常使用在其他编码的相互转换之中,例如MP3转换成WMA。
简单来说:pcm是无损wav文件中音频数据的一种编码方式,但wav还可以用其它方式编码。
这里详细写了pcm和wav的区别,我简单概括成pcm少了一个wav头描述信息。为此我从讯飞语音的sdk中移植出填写wav头的函数并修改了一下
//为pcm文件写入wav头 + (NSData *) writeWavHead:(NSData *) audioData { 长sampleRate=[[自我GetAudioRecorderSettingDict] [AVSampleRateKey] longValue]; 长numOfChannelsKey=[[自我GetAudioRecorderSettingDict] [AVNumberOfChannelsKey] longValue]; 字节waveHead [44]; waveHead [0]=' R '; waveHead[1]=拔摇? waveHead [2]=' F '; waveHead [3]=' F '; 长totalDatalength=[audioData长度]+ 44; waveHead[4]=(字节)(totalDatalength,0 xff); waveHead[5]=(字节)((totalDatalength祝辞祝辞8),0 xff); waveHead[6]=(字节)((totalDatalength祝辞祝辞16),0 xff); waveHead[7]=(字节)((totalDatalength祝辞祝辞24),0 xff); waveHead [8]=' W '; waveHead [9]=' A '; waveHead [10]=' V '; waveHead [11]=癊”; waveHead [12]=' f '; waveHead [13]=癿”; waveHead [14]=' t '; waveHead [15]=" "; waveHead [16]=16;//fmt的大小 waveHead [17]=0; waveHead [18]=0; waveHead [19]=0; waveHead [20]=1;//格式 waveHead [21]=0; waveHead [22]=numOfChannelsKey;//香奈儿 waveHead [23]=0; waveHead[24]=(字节)(sampleRate,0 xff); waveHead[25]=(字节)((sampleRate祝辞祝辞8),0 xff); waveHead[26]=(字节)((sampleRate祝辞祝辞16),0 xff); waveHead[27]=(字节)((sampleRate祝辞祝辞24),0 xff); 长byteRate=sampleRate * 2 *(16祝辞祝辞3);; waveHead[28]=(字节)(byteRate,0 xff); waveHead[29]=(字节)((byteRate祝辞祝辞8),0 xff); waveHead[30]=(字节)((byteRate祝辞祝辞16),0 xff); waveHead[31]=(字节)((byteRate祝辞祝辞24),0 xff); waveHead[32]=2 *(16祝辞祝辞3); waveHead [33]=0; waveHead [34]=16; waveHead [35]=0; waveHead [36]=' d '; waveHead [37]=' a '; waveHead [38]=' t '; waveHead [39]=' a '; 长totalAudiolength=(audioData长度); waveHead[40]=(字节)(totalAudiolength,0 xff); waveHead[41]=(字节)((totalAudiolength祝辞祝辞8),0 xff); waveHead[42]=(字节)((totalAudiolength祝辞祝辞16),0 xff); waveHead[43]=(字节)((totalAudiolength祝辞祝辞24),0 xff); NSMutableData * pcmData=[[NSMutableData alloc] initWithBytes:, waveHead长度:sizeof (waveHead)]; [pcmData方法:audioData]; 返回pcmData;//[pcmData writeToFile: kVoiceWav自动:真); }iOS的音频文件的格式转换示例