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

Ed *_*rty 13 iphone core-audio audio-recording amr ios

录音机不需要未压缩的线性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;
Run Code Online (Sandbox Code Playgroud)

ole*_*ret 13

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

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

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

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

编辑:更新官方api链接