如何在iPhone上录制AMRaudio格式?

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

有没有人有任何实际loggingAMR代码?

编辑: AMR格式是设置数据types的选项之一,但其他选项(包大小,帧大小等)似乎不匹配,无论我设置。

编辑:这是我有什么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上进行编码/录制,尽pipe支持播放:这是kAudioFormatAMR常量存在的原因。

官方api说支持的编码格式是:

  • ALAC (Apple Lossless)〜> kAudioFormatAppleLossless
  • iLBC (互联网低比特率编解码器,用于语音)〜> kAudioFormatiLBC
  • IMA / ADPCM (IMA4)〜> kAudioFormatAppleIMA4
  • 线性 PCM〜> kAudioFormatLinearPCM
  • μ- law〜> kAudioFormatULaw
  • a- law〜> kAudioFormatalaw

您可以尝试其中一种格式,或者像goldenmean所build议的那样使用开源的AMR编码器。

编辑 :更新官方api链接

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

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

我猜AMR编解码器格式不支持我的iPhone录音机应用程序。

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

-广告

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