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

时间:2008-11-09 23:10:13

标签: iphone ios core-audio audio-recording amr

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

是否有人有任何实际记录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;

4 个答案:

答案 0 :(得分:13)

在iPhone上编码/录制不支持AMR编解码器,虽然它支持播放:这就是kAudioFormatAMR常量存在的原因。

Official api表示支持的编码格式为:

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

您可以尝试使用其中一种格式,或使用goldenmean建议的开源AMR编码器。

修改:更新了官方API链接

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

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

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

-AD

答案 3 :(得分:1)

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