如何在iPhone上录制AMR音频格式?

问题描述:

录音机不需要非压缩的线性PCM音频。压缩AMR会很好。为录制音频而构建的iPhone框架非常简单,但我发现的用于设置音频格式(来自Apple)的唯一示例使用了LinearPCM。我尝试了各种其他值的组合,但似乎无法获得任何工作。如何在iPhone上录制AMR音频格式?

有没有人有任何实际记录AMR的代码?

编辑: 的AMR格式是用于设置数据类型的选项之一,但其他选项(数据包大小,帧大小等)似乎并不匹配,无论我将它们设置至。

编辑:下面是我对PCM版本:

/* 
If we want to use AMR instead of PCM: 
AMR Format: 
Sampling Frequency: 8 kHz/13-bit (160 samples for 20 ms frames), filtered to 200-3400 Hz 
eight source codecs : 12.2, 1.2, 7.95, 7.40, 6.70, 5.90, 5.15, 4.75 kbit/s 
generated frame length: 244, 204, 159, 148, 134, 118, 103, 95 bits per frame 
*/ 
format->mFormatID = kAudioFormatLinearPCM; 
format->mSampleRate = 8000.0; //8 kHz 
format->mFramesPerPacket = 1; //1 frame per packet 
format->mChannelsPerFrame = 1; //Mono 
format->mBytesPerFrame = 2;  //8/bits per frame (round up) 
format->mBytesPerPacket = 2; //Same as bytes per frame 
format->mBitsPerChannel = 16; //16-bit audio 
format->mReserved = 0;   //always 0 
format->mFormatFlags = kLinearPCMFormatFlagIsBigEndian | 
         kLinearPCMFormatFlagIsSignedInteger | 
         kLinearPCMFormatFlagIsPacked; 

AMR编解码器不支持的编码/记录在iPhone上,尽管它被支承用于播放:这是kAudioFormatAMR恒定存在的原因。

Official api说支持的编码格式是:

  • ALAC(苹果无损)〜> kAudioFormatAppleLossless
  • 的iLBC(互联网低比特率编解码器,语音) - > kAudioFormatiLBC
  • IMA/ADPCM(IMA4)〜> kAudioFormatAppleIMA4
  • 线性PCM〜> kAudioFormatLinearPCM
  • μ律〜> kAudioFormatULaw
  • a法则〜> kAudioFormatALaw

您可以尝试这些格式之一,或者使用开放源码AMR编码器建议goldenmean

编辑:更新了官方的API链接

我想AMR编码格式不支持我的iPhone语音记录器的应用程序。

可能会尝试将AMR编码器的一些开源实现集成到苹果的iPhone应用程序框架中,并尝试使录音机以AMR编码格式存储音频。 (我不知道苹果是否允许他们的NDA /许可证)。

-AD

要更新olegueret的链接官方文档(为什么他们隐瞒这个东西?)

http://developer.apple.com/library/ios/#qa/qa2008/qa1615.html

您可以录制音频的未压缩线性PCM缓存(圆形或环形),并在另一个线程,转换该缓冲区中的数据,使用自己的AMR(或其他)的压缩引擎,前将压缩的音频数据保存到文件中。