Пытаюсь создать список воспроизведения музыкальных файлов, которые НЕ являются частью библиотеки iphone пользователя, поэтому я использую AVAudioPlayer
и сам создаю функцию списка воспроизведения. Он работает на первом проходе (имеется в виду первая песня). Когда первая песня заканчивается и она начинает играть, вторая AVAudioPlayer
вылетает в prepareToPlay
.
- (void) create {
Song *song;
NSArray *parts;
NSString *path;
NSString *name;
NSError *err;
if (currentIndex > [queue count])
currentIndex = 0;
if (currentIndex < 0)
currentIndex = ([queue count] - 1);
song = (Song *) [queue objectAtIndex:currentIndex];
name = song.fileName;
parts = [name componentsSeparatedByString:@"."];
path = [[NSBundle mainBundle] pathForResource:[parts objectAtIndex:0] ofType:[parts objectAtIndex:1]];
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &err];
[[AVAudioSession sharedInstance] setActive: YES error: &err];
appPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: url error: &err];
[url release];
[parts release];
[appPlayer prepareToPlay];
[appPlayer setVolume: 1.0];
[appPlayer setDelegate: self];
}
- (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL) flag {
[appPlayer stop];
[appPlayer release];
appPlayer = nil;
[self next];
}
Вызов [self next]
просто увеличивается currentIndex
, а вызовы создаются снова.
Единственное другое (я знаю, печально известное утверждение "только другое") это то, что все это происходит внутри Синглтона. Есть много вещей, которые могут заставить музыку начинать и останавливать воспроизведение, изменять очередь и т. Д., Поэтому я подумал, что лучше всего обернуть все это в одном месте.
Есть мысли?