iPhoneのAVAudioPlayerを介して(非常に短い-2秒未満の)オーディオファイルを再生するときの起動ラグをなくそうとしています。
まず、コード:
NSString *audioFile = [NSString stringWithFormat:@"%@/%@.caf", [[NSBundle mainBundle] resourcePath], @"audiofile"];
NSData *audioData = [NSData dataWithContentsOfMappedFile:audioFile];
NSError *err;
AVAudioPlayer *audioPlayer = [(AVAudioPlayer*)[AVAudioPlayer alloc] initWithData:audioData error:&err];
audioPlayer.delegate = self;
[audioPlayer play];
また、audioPlayerDidFinishPlayingメソッドを実装して、完了したらAVAudioPlayerを解放します。
初めてオーディオを再生するとき、ラグは明白です-少なくとも2秒。ただし、その後すぐに音が鳴ります。そのため、原因は[NSData dataWithContentsOfMappedFile]が最初にフラッシュからの読み取りに長い時間を要したが、その後の読み取りでは高速であることが原因であると思われます。ただし、それをテストする方法はわかりません。
そうですか?もしそうなら、NSDataオブジェクトを事前にキャッシュし、メモリ不足の状態でそれらをクリアすることに積極的に取り組む必要がありますか?