SimpleAudioEngine shuffle плейлист
Я хочу перемешать дюжину песен в моей игре. Следующая песня не должна совпадать с текущей.
[[[SimpleAudioEngine sharedEngine] playBackgroundMusic: song];
Там должен быть цикл и песня должна быть рандомизирована,
[[NSString stringWithFormat: @"song%i.mp3", arc4random() % 20 + 1];
//20 songs starting from song1.mp3
Было бы замечательно, если песня перестанет играть, когда играет музыка ipod пользователя. Но звуковой эффект все же должен быть доступен:
[[SimpleAudioEngine sharedEngine] playEffect: @"aaa.caf"]
Кроме того, когда играет музыка ipod, а затем запустите игру, музыка игры даже не должна запускаться.
Как это реализовать?
1 ответ
Когда вы запускаете свое приложение, вы можете проверить, как это, и играть или нет свою собственную музыку.
if ([[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying) {
// dont play and do whatever you think should be done in this case
} else {
[[[SimpleAudioEngine sharedEngine] playBackgroundMusic: song];
}
Примечание:
//Remember to preload your effects and bg music so there is not any delay
[[SimpleAudioEngine sharedEngine] preloadEffect:@"aaa.caf"];
[[SimpleAudioEngine sharedEngine] preloadBackgroundMusic:@"song1.mp3"];
//And to unload your effects when you wont use them anymore or receive a mem warning, or in dealloc
[[SimpleAudioEngine sharedEngine] unloadEffect:@"aaa.caf"];
ОБНОВИТЬ
В viewDidLoad создайте массив строк со всеми вашими песнями и перемешайте их с помощью: [self shuffle], для этого реализуйте этот код:
- (void)shuffle {
for (NSInteger i = [songsArray count] - 1; i > 0; --i) [songsArray exchangeObjectAtIndex:(arc4random() % (i+1)) withObjectAtIndex:i];
}
Каждый раз, когда ваша фоновая музыка заканчивает использовать [self shuffle]
а потом playBackgroundMusic:[songsArray lastObject]
это должно заботиться о вашем перемешанном плейлисте.