2011-08-14 4 views
0

내 게임에서 수십 곡을 섞어서 사용하고 싶습니다. 다음 노래는 현재 노래와 동일하지 않아야합니다.SimpleAudioEngine 셔플 재생 목록

[[[SimpleAudioEngine sharedEngine] playBackgroundMusic: song]; 

노래는 사용자의 아이팟 음악이 재생 될 때 재생을 중지 할 경우

[[NSString stringWithFormat: @"song%i.mp3", arc4random() % 20 + 1]; 
//20 songs starting from song1.mp3 

그것은 좋은 것, 루프와 노래가 무작위해야이 있어야합니다. 그러나 음향 효과는 여전히 사용할 수 있어야합니다 : 아이팟 음악이 재생 될 때

[[SimpleAudioEngine sharedEngine] playEffect: @"aaa.caf"] 

은 또한, 다음 게임을 시작, 게임 음악도 시작하지 않아야합니다.

어떻게 구현하나요?

+0

재생 목록은 내 게임이 아니며 사용자의 iPod 재생 목록입니다. – OMGPOP

답변

0

앱을 시작하면 이와 같이 확인하고 자신의 음악을 재생하거나 재생할 수 있습니다. 문제는이 코드를 구현하기위한, [자기 셔플] :

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"]; 

UPDATE가있는 viewDidLoad에서

, 모든 노래가있는 문자열 배열을 만들고 그들을 셔플 :

- (void)shuffle { 
    for (NSInteger i = [songsArray count] - 1; i > 0; --i) [songsArray exchangeObjectAtIndex:(arc4random() % (i+1)) withObjectAtIndex:i]; 
} 

언제든지 귀하의 백 글로우 음악을 끝내려면 [self shuffle]을 사용한 다음 다시 재생할 재생 목록을 처리해야하는 playBackgroundMusic:[songsArray lastObject]을 사용해야합니다.

+0

내가 원하는 것은 재생 목록을 섞는 것입니다. 현재 노래를 마친 후 무작위로 새로운 노래를 선택하십시오. 귀하의 코드는 하나의 노래만을 재생합니다. – OMGPOP

+0

셔플로 답변을 업데이트했습니다. –

+0

하나의 노래 재생이 끝나면 어떻게 멈출 수 있습니까? – OMGPOP