Проверьте, играет ли музыка - PullRequest
0 голосов
/ 24 июля 2011

В настоящее время в моем приложении воспроизводится фоновая музыка. в:

-(void)viewDidLoad

Я запускаю музыку, используя:

 [self LoadMusic];

Это в основном запускает музыкальные буферы, а затем, если в настройках указано, что «Звук включен», музыка запускается.

Проблема, с которой я столкнулся, заключается в том, что когда я перемещаю представления, музыка продолжает воспроизводиться (как и должно быть), но когда вы возвращаетесь к контроллеру представления, где музыка была впервые запущена, она снова активируется.

Так что в итоге вы получаете одну и ту же музыку, зацикливающуюся друг на друге.

Я пробовал несколько вещей, таких как:

if(MusicPlay.playing){
// do nothing
}else{
// start music
  [self LoadMusic];
}

Это код для loadMusic

- (void) LoadMusic{
    //Notification for stoping
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stopMusic) name:@"StopMusic" object:nil];
    //Notification for playing
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playMusic) name:@"PlayMusic" object:nil];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *SoundSwitch = [defaults stringForKey:@"Sound_EnabledS"];  


    // grab the path to the caf file
    NSString *soundFilePath =
    [[NSBundle mainBundle] pathForResource: @"Menu_Loop"
                                    ofType: @"mp3"];
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
    // create a new AVAudioPlayer initialized with the URL to the file
    AVAudioPlayer *newPlayer =
    [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
                                           error: nil];
    // set our ivar equal to the new player
    self.MusicPlay = newPlayer;
    // preloads buffers, gets ready to play
    [MusicPlay prepareToPlay];
    MusicPlay.numberOfLoops = -1; // Loop indefinately
    if ([SoundSwitch isEqualToString:@"1"]){
        [self.MusicPlay play];  // Plays the sound
    }else{
        [self.MusicPlay stop];  // Stops the sound
    }
}

Но это не работает, так как не видит MusicPlay.playing верно только после перезапуска представления

Если у кого-то есть хороший способ решить эту проблему. Пожалуйста, дайте мне знать.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Я предполагаю, что здесь происходит то, что вы не можете утилизировать self.MusicPlay, когда представление главного меню выгружено. Если фоновая музыка должна продолжать воспроизводиться, пока вы переключаете представления, она, вероятно, должна обрабатываться контроллером приложения (или эквивалентным), а не одним конкретным представлением.

0 голосов
/ 25 июля 2011

Ваш код также должен работать, но проверьте с помощью следующего кода

if([self.MusicPlay isPlaying]){ // playing is property and isPlaying is getter method
// do nothing
}else{
// start music
  [self LoadMusic];
}
...