13

录音机不需要未压缩的线性 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

4 回答 4

13

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

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

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

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

编辑:更新了官方 api 链接

于 2009-03-05T13:10:13.310 回答
4

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

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

于 2010-09-30T19:03:11.337 回答
2

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

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

-广告

于 2008-11-10T00:53:44.623 回答
1

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

于 2012-04-20T18:36:51.723 回答