SimpleAudioEngine перемешивает плейлист - PullRequest
0 голосов
/ 14 августа 2011

Я хочу перемешать дюжину песен в моей игре.Следующая песня не должна совпадать с текущей.

[[[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 Ответ

0 голосов
/ 14 августа 2011

Когда вы запускаете свое приложение, вы можете проверить, как это, и воспроизводить или не воспроизводить собственную музыку.

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], который должен позаботиться о вашем перетасованном плейлисте.

...