0

在我的应用程序中,只要应用程序开始播放无限循环的背景声音,我就会启动 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 文件中,我将变量移动到声明空间的头文件中。现在它可以按预期完美运行。:)

4

2 回答 2

0

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

两个 AVAudioPlayer 实例可能会给您带来此类问题。

于 2012-09-21T07:32:11.470 回答
0

好吧,你说,有 2 个 AVAudioPlayers。

我认为第一个玩家是 _audioPlayer 广告第二个玩家是 monkeyPlayer

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

IE,

[_audioPlayer stopPlay];
 [monkeyPlayer Play];

它将停止背景音乐。

于 2012-09-21T08:39:53.837 回答