如何在 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 音频格式?的主要内容,如果未能解决你的问题,请参考以下文章