確かに、しかし がAVAudioPlayer
割り当てられ、プレイの準備が整っているため、遅延が発生します。何をいつプレイするか予測できますか? もしそうなら、特定の mp3 を再生する必要がある数秒前にロードできるかもしれません。
タイミング要件によっては機能しない可能性がある代替手段は次のとおりです。
- (void)prepareAudioPlayer {
static int index = -1;
index = index + 1;
if (index < [[self FileNames] count]) {
NSError *err = nil;
NSString *audioFilePath = @""; // Figure out how to get each file name here
NSURL *audioFileURL = [NSURL fileURLWithPath:audioFilePath];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:&err];
if (err) {
NSLog(@"Audio Player Error: %@", [err description]);
}
[player prepareToPlay];
// Add this player to the "AudioPlayers" array
[[self AudioPlayers] addObject:player];
// Recurse until all players are loaded
[self prepareAudioPlayer];
}
}
この解には と のプロパティが必要FileNames
ですAudioPlayers
。
これが設定されると、次のようなことができます (おそらく でviewDidLoad
)。
// Make the file name array
[self setFileNames:[NSMutableArray array]];
// Initiate the audio player loading
[self performSelectorInBackground:@selector(prepareAudioPlayer) withObject:nil];
後で特定のファイルを再生する必要がある場合は、配列内のファイル名のインデックスと、配列内のそのインデックスFileNames
の呼び出しplay
を見つけることができます。AVAudioPlayer
AudioPlayers
これはおそらく最善の方法ではないように思えますが、この方法が必要な場合は機能する可能性があります。