2011-02-15 5 views
1

백그라운드에서 노래를 재생할 AVAudioPlayer가있는 게임의 UIViewController 하위 클래스가 있습니다. 내 viewDidLoad 메서드에는 다음 코드가 있습니다.UIViewController에서 AVAudioPlayer 사용

[super viewDidLoad]; 

... 

[NSTimer scheduledTimerWithInterval: 0.03 target: self selector: @selector(gameLoop) userInfo: nil repeats: YES]; 

NSString *path = @"path-to-song"; 
self->audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath: path] error: NULL]; 
audioPlayer.delegate = self; 
audioPlayer.numberOfLoops = - 1; 
[audioPlayer play]; 

gameLoop은 게임의 핵심 논리를 포함하는 메서드입니다. 테스트 장치에서 앱을 실행하면 오디오가 재생되지만 화면이 멈추고 gameLoop이 정상적으로 실행되지 않습니다. 모든 AVAudioPlayer 코드를 제거하면 게임이 정상적으로 작동합니다. 내가 인식하지 못하는 문제가 여기에있는 것처럼 보입니다. 어떤 아이디어?

+0

오디오 파일의 형식은 무엇입니까? (그냥 44Mhz AIFF 파일이 아니거나 매우 높은 비트 전송률의 MP3가 아닌지 확인하십시오.) –

+0

왜 다른 점이 있습니까? 오디오가 잘 재생됩니다 ... –

답변

2

는 백그라운드 스레드에서하는 방법으로 AVAudioPlayer 코드를 이동하고 실행 해보십시오 매 0.3 초 ​​후에 호출됩니다 그것 problem.Because 수 NO.May like :

- (void)playSong:(NSURL*)atURL 
{ 
    self->audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: atURL error: NULL]; 
    audioPlayer.delegate = self; 
    audioPlayer.numberOfLoops = - 1; 
    [audioPlayer play]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    ... 

    NSURL* url = [NSURL fileURLWithPath: @"path-to-song"] 
    [self performSelectorInBackground: @selector(playSong:) withObject: url]; 
} 
+0

이것은 시뮬레이터에서 작동하는 것 같습니다. 오디오가 Mac에서 RDP보다 실제로 재생되고 있는지 확실하지 않습니다. 내일 실제 iPhone 기기에서 테스트하고 어떻게 진행되는지 살펴 보겠습니다. 그래도 코드가 제대로 작동하는 것처럼 보입니다. 감사합니다. 하나의 작은 것, 나는 당신이 playSong이 하나의 인수를 취하기 때문에'@selector (playSong :)'를 맨 아래 줄에 넣으려고했다고 생각합니다. 작동하는 경우 +1하고 답변을 수락합니다. ;) –

+0

그래, 시뮬레이터와 장치 모두에서 완벽하게 작동했습니다. 감사! +1 –

0

타이머 반복을 제거 : 예 반복에 : 당신의 gameLoop 방법이

+1

의도입니다 - 따라서 게임 ** 루프 **;) –