1

コアオーディオを使用して iOS アプリをコーディングしています。不思議なものが出てきます。

すること:

AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *err = nil;
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDuckOthers error:&err];
[session setActive:YES error:&err];

バックグラウンドミュージックはダッキングされています。それから私はそれを再開しようとします:

[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&err];

エラーはありませんが、バック グラウンド ミュージックはまだダッキングされています。次に、次のように置き換えます。

[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:0 error:&err];

できます!バックグラウンドミュージックが消えた!

最初の試行が失敗し、2 回目の試行が成功する理由がわかりません。

私の意見では、違いはありません!

4

2 に答える 2

1

まず、これら 2 行のコードは同等ではありません。AVAudioSessionCategoryOptionMixWithOthers実際の値は 1 です。値 0 を設定すると、カテゴリ オプションが必要ないことを意味します。

第二に、実際に何を達成しようとしているのかが不明確です。他のオーディオ チャンネルをダッキングして (つまり、より低い音量で再生する)、この効果を削除したいとします (これはAVAudioSessionCategoryOptionMixWithOthersオプションの設定になります)。しかし、その後、バックグラウンドミュージックが消えたことで成功を宣言しますが、これはまったく別のことです.

編集

ダッキング効果を削除するには、新しいカテゴリを設定する代わりに、ダッキング セッションを無効にしてみてください。

アップルのドキュメントから:

ダッキングが行われると、電話の音声を除く、デバイス上の他のすべての音声の音量が下がります。ダッキングを使用するアプリは、セッションのアクティブ化状態を管理する必要があります。オーディオの再生前にオーディオ セッションをアクティブにし、オーディオの再生後にセッションを非アクティブにします。

于 2016-05-30T08:04:15.703 に答える