0

私のアプリケーションでは、アプリが無期限にループするバックグラウンド サウンドの再生を開始するとすぐに AVAudioPlayer を開始します。このバックグラウンド サウンドは、アプリが開いている間ずっと再生されます。

アプリを開くとバックグラウンド サウンドは正常に開始されますが、別のプレーヤーを作成して別のサウンドを開始すると (たとえば、ディスプレイに触れたとき)、2 番目のサウンドが再生され始め、何らかの理由でバックグラウンド サウンドが停止します。

// 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 クラスの 1 行を変更して修正しました。

持つ代わりに

AVAudioPlayer *player;

AudioPlayer.m ファイルで、宣言スペースのヘッダー ファイルに変数を移動しました。今では完全に意図したとおりに機能します。:)

4

2 に答える 2

0

PerformSelectorOnMainThreadを実行して、別のスレッドで別のプレーヤーを呼び出す必要があると思います。

AVAudioPlayerの2つのインスタンスは、そのような問題を引き起こす可能性があります。

于 2012-09-21T07:32:11.470 に答える
0

さて、あなたが言ったように、2 つの AVAudioPlayers があります。

1 番目のプレーヤーは _audioPlayer で、2 番目のプレーヤーは monkeyPlayer だと思います

_audioPlayer がバックグラウンドで再生されています。2 番目のサウンド (monkeyPlayer) を呼び出したら、_audioPlaer を停止します。

つまり、

[_audioPlayer stopPlay];
 [monkeyPlayer Play];

バックグラウンドミュージックを停止します。

于 2012-09-21T08:39:53.837 に答える