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

Posted

技术标签:

【中文标题】如何在 iPhone 上录制 AMR 音频格式?【英文标题】:How can I record AMR audio format on the iPhone? 【发布时间】:2010-09-21 13:21:32 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

-AD

【讨论】:

【参考方案2】:

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

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

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

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

编辑:更新官方api链接

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于如何在 iPhone 上录制 AMR 音频格式?的主要内容,如果未能解决你的问题,请参考以下文章

vue.js实现audio播放amr格式音频

我可以在 iPhone 4 上录制视频的同时播放音频吗?

如何在 iPhone 上使用音频单元

在 iPhone 上录制“Apple 无损”音频

iPhone 和 Android 可以录制和播放哪种音频格式?

使用如何在 iPhone 中以 mp3 格式录制声音的音频队列服务示例