iPhoneでAMRオーディオ形式を録音するにはどうすればよいですか?
-
07-07-2019 - |
質問
ボイスレコーダーは、非圧縮のリニアPCMオーディオを必要としません。圧縮された AMR
は問題ありません。オーディオの録音用に構築されたiPhoneフレームワークは非常に単純ですが、オーディオ形式(Appleから提供されている)をセットアップするために見つけた唯一の例は、LinearPCMを使用しています。他のさまざまな値の組み合わせを試しましたが、何も機能しないようです。
実際に AMR
を記録するコードはありますか?
編集: AMR形式はデータ型を設定するためのオプションの1つですが、他のオプション(パケットサイズ、フレームサイズなど)は、設定に関係なく一致しないようです。
編集: 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;
解決
AMRコーデックは、再生ではサポートされていますが、iPhoneでのエンコード/記録ではサポートされていません。これがkAudioFormatAMR定数が存在する理由です。
公式API は、サポートされているエンコード形式が:
- ALAC (Apple Lossless)〜> kAudioFormatAppleLossless
- iLBC (スピーチ用のインターネット低ビットレートコーデック)〜> kAudioFormatiLBC
- IMA / ADPCM (IMA4)〜> kAudioFormatAppleIMA4
- リニアPCM 〜> kAudioFormatLinearPCM
- µ -law 〜> kAudioFormatULaw
- a-law 〜> kAudioFormatALaw
これらの形式のいずれかを試すか、または goldenmean が示唆しています。
編集:公式APIリンクの更新
他のヒント
olegueretの公式ドキュメントへのリンクを更新するには(なぜこれらを隠すのですか?)
http://developer.apple.com/library/ios /#qa/qa2008/qa1615.html
AMRコーデック形式は、iPhoneボイスレコーダーアプリでサポートされていません。
AppleのiPhoneアプリケーションフレームワークにAMRエンコーダーのオープンソースの実装を統合し、音声レコーダーにAMRエンコード形式で音声を保存させることができます。 (アップルがNDA /ライセンスによって許可されているかどうかはわかりません)。
-AD
非圧縮のリニアPCMバッファー(円形またはリング)にオーディオを録音し、別のスレッドで、独自のAMR(またはその他の)圧縮エンジンを使用してこのバッファーのデータを変換してから、圧縮オーディオデータをファイル。