2008-11-09 128 views
12

錄音機不需要非壓縮的線性PCM音頻。壓縮AMR會很好。爲錄製音頻而構建的iPhone框架非常簡單,但我發現的用於設置音頻格式(來自Apple)的唯一示例使用了LinearPCM。我嘗試了各種其他值的組合,但似乎無法獲得任何工作。如何在iPhone上錄製AMR音頻格式?

有沒有人有任何實際記錄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; 

回答

13

AMR編解碼器不支持的編碼/記錄在iPhone上,儘管它被支承用於播放:這是kAudioFormatAMR恆定存在的原因。

Official api說支持的編碼格式是:

  • ALAC(蘋果無損)〜> kAudioFormatAppleLossless
  • 的iLBC(互聯網低比特率編解碼器,語音) - > kAudioFormatiLBC
  • IMA/ADPCM(IMA4)〜> kAudioFormatAppleIMA4
  • 線性PCM〜> kAudioFormatLinearPCM
  • μ律〜> kAudioFormatULaw
  • a法則〜> kAudioFormatALaw

您可以嘗試這些格式之一,或者使用開放源碼AMR編碼器建議goldenmean

編輯:更新了官方的API鏈接

2

我想AMR編碼格式不支持我的iPhone語音記錄器的應用程序。

可能會嘗試將AMR編碼器的一些開源實現集成到蘋果的iPhone應用程序框架中,並嘗試使錄音機以AMR編碼格式存儲音頻。 (我不知道蘋果是否允許他們的NDA /許可證)。

-AD

1

您可以錄製音頻的未壓縮線性PCM緩存(圓形或環形),並在另一個線程,轉換該緩衝區中的數據,使用自己的AMR(或其他)的壓縮引擎,前將壓縮的音頻數據保存到文件中。