他のiOSデバイスにオーディオファイル(安全/暗号化)を送信できるiOSアプリケーションを変更しようとしています。 AVAudioRecorderを使用してオーディオファイルを記録し、AVAudioPlayerを使用して受信したオーディオファイルを再生します。AVAudioRecorderは、開くことができる.m4aファイルを作成しません。
私は現在、Androidと互換性のあるファイルを作成して送信するようにアプリケーションを修正しようとしています。私はこれまで、既存のAVAudioRecorderコードを変更:
[settings setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[settings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
[settings setValue:[NSNumber numberWithInt:16] forKey:AVEncoderBitRateKey];
[settings setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
[settings setValue:[NSNumber numberWithFloat:48000.0] forKey:AVSampleRateKey];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dirPath = [paths objectAtIndex:0];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd HH-mm"];
NSString *filename = [NSString stringWithFormat:@"%@.aac", [format stringFromDate:NSDate.date]];
これによって作成されたファイルは、Mac上で、iOSデバイス上ではなく、Androidデバイス上で再生できます。ファイル拡張子を ".m4a"で終わるよう手動で変更した場合、ファイルはAndroid上で再生されます。
(「.aac」形式の利点は、アプリの古いバージョンでは、これらのファイルを受信し、それらを再生することができますということです - 私は後方互換性を維持してきました。)
は、だから私はこの変更を行った。NSString *filename = [NSString stringWithFormat:@"%@.m4a", [format stringFromDate:NSDate.date]];
ただし、結果ファイル(AVAudioRecorderからエラーなしで作成されたファイル)は、MacでもiOSデバイスでも再生できません。 Android上で動作するかどうか聞くのを待っています。
AVAudioPlayerは、そのファイルを開こうとすると、それは出力:
エラードメイン= NSOSStatusErrorDomainコード= 1685348671 "操作 が完了できませんでした(OSStatusエラー1685348671.)" コード1685348671 - > "dta?":ファイルの形式が正しくありません。タイプのオーディオファイルの有効なインスタンスではなく、オーディオファイルとして認識されません。
「.aac」を持つようにファイルの名前を変更しても、MacまたはiOSのいずれにもロードできないという事実は変わりません。
今、「.aac」ファイルを作成し、Androidエンドで「.aac」を「.m4a」に置き換えて再生するのが最善のソリューションだと思われます。
質問1:ファイル拡張子を変更するとAVAudioPLayerが失敗する原因が分かるのですか?ところで、私が上記で作成した ".m4a"ファイルは、Mac上にあるものでは開けませんので、問題がファイル形式であるのか、iOSやMacでこのファイル形式を読むことができないのか分からない。好奇心旺盛な人のため
は、私はここで、AVAudioRecorderから ".aac" と ".M4A" ファイルのコピーを置く:
https://dl.dropboxusercontent.com/u/14939586/2013-07-08%2013-24.m4a https://dl.dropboxusercontent.com/u/14939586/2013-07-08%2010-11.aac
は質問2:私は1つにAVAudioRecorderを設定している間結果のファイルはステレオです。どうして? (少なくとも、VLCがメタデータについて語っていることです)
質問3:可逆符号化にAAC-LCを指定する方法はありますか?または、私がAVAudioRecorderからより低いレベルのAPIに移行する場合にのみ行うことができますか?
これは役に立ちます:http://stackoverflow.com/questions/4279311/how-to-record-voice-in-m4a-format –
その質問に関する受け入れられた答えは完全に間違っています。このファイルは実際のAACファイルではありません。それはちょうどm4aで包まれています。他の答えの1つが正しいです。また、より多くの助けがこの答えだった:http://stackoverflow.com/a/12698691/86020 – mahboudz