检查音乐是否正在播放

时间:2011-07-24 12:47:29

标签: iphone avaudioplayer

我目前在我的应用程序中播放背景音乐。 在:

-(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 个答案:

答案 0 :(得分:2)

我猜这里发生的事情是,当主菜单的视图被卸载时,你没有处理self.MusicPlay。如果在切换视图时需要继续播放背景音乐,它应该由应用程序控制器(或等效的)处理,而不是由一个特定的视图处理。

答案 1 :(得分:0)

您的代码也可以使用,但请查看以下代码

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