iOS的音频文件的格式转换示例

  


  

  

因为我的公司需要设计到软件与硬件的通信,所以去年深入的研究了一下音频各种格式的转换,曾写过一篇简书,现在搬过来丰富下自己的博客。

  


  

  
      <李> .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的音频文件的格式转换示例