AVAudioPlayer:第二个播放器停止背景声音

时间:2012-09-20 10:42:17

标签: iphone ios avaudioplayer

在我的应用程序中,只要应用程序开始播放无限循环的背景声音,我就会启动AVAudioPlayer。这个背景声音应该在应用程序打开的整个时间播放。

当我打开应用程序时,背景声音正确启动,但是当我创建另一个播放器并开始另一个声音时(例如,当我触摸显示屏时),第二个声音开始播放,背景声音由于某种原因停止。

// This should start the background sound. _audioPlayer is declared in the header file.
_audioPlayer = [[AudioPlayer alloc] init];
[_audioPlayer soundPlay:@"/rainforestambience.wav" withLoops:-1];

// Starts another sound later.
AudioPlayer *monkeyPlayer = [[AudioPlayer alloc] init];
[monkeyPlayer soundPlay:@"/jungle1.wav" withLoops:1];

// Play function in my AudioPlayer class.
AVAudioPlayer *player;
- (void) soundPlay:(NSString *)filePath withLoops: (int)loops
{
    NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
    resourcePath = [resourcePath stringByAppendingString:filePath];
    NSLog(@"Path to play: %@", resourcePath);
    NSError* err;

    player = [[AVAudioPlayer alloc] initWithContentsOfURL:
          [NSURL fileURLWithPath:resourcePath] error:&err];

    player.numberOfLoops = loops;
    [player prepareToPlay];

    if(err) {
        NSLog(@"Failed with reason: %@", [err localizedDescription]);
    } else {
        [player play];
    }
}

编辑:通过更改我的AudioPlayer类中的一行来修复它。

而不是

AVAudioPlayer *player;

在AudioPlayer.m文件中,我将Variable移动到声明空间中的头文件中。现在它完美且按预期工作。 :)

2 个答案:

答案 0 :(得分:0)

我猜你应该通过执行performSelectorOnMainThread调用另一个线程中的另一个玩家。

AVAudioPlayer的两个实例可能会给您带来这样的问题。

答案 1 :(得分:0)

  

嗯,你说,有2个AVAudioPlayers。

     

我认为第一名球员是_audioPlayer,第二名球员是monkeyPlayer

     

_audioPlayer正在播放背景。   当你调用第二个声音(monkeyPlayer)时,只需停止_audioPlaer

     

[_audioPlayer stopPlay];
 [monkeyPlayer Play];

它将停止背景音乐。