🎶

オーディオセッションプログラミングガイド 日本語訳 資料編

2024/02/29に公開

Audio Session Programming Guide

日本語訳 本文編
日本語訳 資料編 この記事です

Audio Guidelines By App Type

ドライビングゲームとリアルタイムのビデオチャットアプリは求められるオーディオ要件が異なります。ここからは、様々なタイプのオーディオアプリの設計ガイドラインを示します。

Audio Guidelines for Game Apps

ほとんどのゲームでは、ゲーム内で何かが起こるにはユーザーの操作が必要です(つまりバックグラウンドで存在することに意味がないということか?)。ゲームをデザインするときは、AVAudioSessionCategoryAmbient または AVAudioSessionCategorySoloAmbient カテゴリを使用してください。ユーザーが別のアプリを起動したり、画面がロックされたとき、アプリの音楽再生が継続されることは期待していません。また、別のアプリのオーディオを再生し続けながらゲームアプリを実行することを望んでいることがよくあります。

以下は推奨されるガイドラインである:

  • アプリデリゲートの applicationDidBecomeActive: メソッドでオーディオセッションをアクティブにします。
  • 他のアプリのオーディオを再生しながら、アプリの効果音を再生(できることに対応する)
  • (起動時に)他のオーディオが再生されていないときは自分のアプリのサウンドトラックのオーディオを再生し、他のオーディオが再生されているならそのオーディオを再生する。
  • 中断から復帰した後、アクティブ化してください。そしてサウンドエフェクトの再生を再開してください。
  • オーディオセッションの secondaryAudioShouldBeSilencedHint プロパティを取得すると、ゲームのサウンドトラックの再生を再開すべきかどうかを判断できます。
  • アプリが特に注意を払う必要がない限り、すべてのルート変更は無視する。
  • アプリ起動時にビデオスプラッシュ(音付きでロゴなどを表示するやつ?)を表示するならそれより前にオーディオカテゴリを設定します。

Audio Guidelines for User-Controlled Playback and Recording Apps

Pandora や Netflix のような録音アプリや再生アプリにも同様のガイドラインがあります。これらのタイプのアプリが使用するカテゴリは、

  • AVAudioSessionCategoryPlayback
  • AVAudioSessionCategoryRecord
  • AVAudioSessionCategoryPlayAndRecord

です。通常、オーディオセッションがアクティブになると、他のシステムオーディオを中断します。UIは再生/一時停止ボタンまたは録音/一時停止ボタンを含みます。

以下は推奨されるガイドラインである:

  • アプリがフォアグラウンドに入ったら、ユーザーが再生ボタンまたは録音ボタンを押すのを待ってから、オーディオセッションをアクティブにします。
  • アプリがフォアグラウンドにある間は、中断されない限りオーディオセッションをアクティブに保ちます。
  • アプリがバックグラウンドに遷移する際に、オーディオの再生や録音が実行中でない場合は、そのオーディオセッションを非アクティブにします。これにより、そのオーディオセッションが中断されるのを防ぐことができます。その中断の原因は、ミキシング不可能な別のアプリや、アプリの一時停止に対応するシステムです。
  • 再生または録音が中断されたときに、一時停止したことを示すようにUIを更新する。オーディオセッションを非アクティブにしないでください。
  • AVAudioSessionInterruptionNotification の通知を監視し、オーディオセッションの中断の通知を受けます。中断が終了したときにオーディオの再生や録音を実行しないでください。ただし、中断前にアプリがそうしていた場合は除きます。
  • アンプラグイベント(引っこ抜いた)によってルートが変更された場合、再生または録音を一時停止しますが、オーディオセッションはアクティブなままにします。
  • サスペンド状態からフォアグラウンド状態に遷移する際、アプリのオーディオセッションは非アクティブであると考えてください。ユーザーが再生ボタンまたは録音ボタンを押すと、オーディオセッションを再びアクティブにしてください。
  • バックグラウンド設定のオーディオのフラグが設定されていることを確認する。
  • リモート・コントロール・イベントに登録し(MPRemoteCommandCenterを参照)、Now Playing情報を提供する(MPNowPlayingInfoCenterを参照)。
  • MPVolumeViewオブジェクトを使用して、システムのボリュームスライダーと経路選択ボタンを表示します。
  • アプリがサスペンドされないように、ストリーミング・サイレンスの代わりにバックグラウンド・タスクを使用する(要調査)。
  • requestRecordPermission: メソッドを使ってユーザーに入力記録の許可を求める。オペレーティング・システムがユーザーにプロンプトを出すことに頼ってはいけない。
  • 録音アプリには、AVAudioSessionCategoryRecord カテゴリではなく、AVAudioSessionCategoryPlayAndRecord カテゴリを使用してください。録音専用カテゴリは事実上すべてのシステム出力を無音にし、通常、ほとんどのアプリには制限が多すぎます。

Audio Guidelines for VoIP and Chat Apps

VoIPとチャットアプリは、入力と出力の両方が要求されます。これらのタイプのアプリはAVAudioSessionCategoryPlayAndRecordカテゴリを使用します。また、他のアプリと混在しないようにします。

以下は推奨されるガイドラインである:

  • ユーザーが通話に応答するか、通話を開始したときにオーディオセッションをアクティブにします。
  • 中断の通知が来たら、通話の音声が中断されたことを反映するようにUIを更新します。
  • 中断の後、ユーザーが通話に応答するか、通話を開始するまで、オーディオセッションをアクティブにしないでください。
  • 通話終了後にオーディオセッションを非アクティブにします。それにはAVAudioSessionSetActiveOptionNotifyOthersOnDeactivation を使用してください。
  • アプリが特に注意を払う必要がない限り、すべてのルート変更は無視します。例えば、ルート変更は、セッションのサンプルレート、バッファー時間、あるいはレイテンシーに変化を もたらすかもしれません。これらの値がアプリに関連するものであれば、ルート変更後に最新の状態を取得します。
  • VoIPアプリには、アップルのVoice Processing I/Oオーディオユニットを使用する(要調査)。
  • バックグラウンド設定をON
  • MPVolumeViewオブジェクトを使用して、システムのボリュームスライダーと経路選択ボタンを表示します。
  • requestRecordPermission: メソッドを使ってユーザーに入力記録の許可を求める。オペレーティング・システムがユーザーにプロンプトを出すことに頼ってはいけない。

Audio Guidelines for Metering Apps

測定アプリは、入力と出力ルートへの信号処理が最小限であることを必要とします。信号処理とはシステムが行うものを指します。カテゴリをAVAudioSessionCategoryPlayAndRecordにして、測定モードを設定し、信号処理を最小限にします。また、このタイプのアプリは他のアプリと混在させないようにします。

以下は推奨されるガイドラインである:

  • 中断から復帰したら、アクティブ化して再生の続きを行います。
  • アプリが特に注意を払う必要がない限り、すべてのルート変更は無視する。
  • アプリ起動時にビデオスプラッシュを表示する前に、オーディオカテゴリを設定します。
  • requestRecordPermission: メソッドを使ってユーザーに入力記録の許可を求める。オペレーティング・システムがユーザーにプロンプトを出すことに頼ってはいけない。

Audio Guidelines for Browser-like Apps That Sometimes Play Audio

ソーシャルメディアや他のブラウザのようなアプリは、しばしば短い動画を再生します。これらはAVAudioSessionCategoryPlaybackカテゴリを使用し、マナーモードスイッチに従いません。また、これらのアプリは他のアプリと混在しません。

以下は推奨されるガイドラインである:

  • 常にユーザーが再生を開始するのを待つ。
  • AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation 定数を使用して、ビデオの終了後にオーディオセッションを非アクティブにします。
  • アンプラグイベントによるルート変更でオーディオセッションを一時停止するが、オーディオセッションはアクティブに保つ。
  • ビデオ再生中にリモコンイベントを登録し、ビデオ終了時に登録を解除する。
  • アプリがbegin interruptionイベントを受信すると、UIを更新する。
  • 終了割り込みイベントを受信した後、ユーザーが再生を開始するのを待つ。

Audio Guidelines for Navigation and Workout Apps

ナビゲーションアプリとワークアウトアプリは AVAudioSessionCategoryPlayback または AVAudioSessionCategoryPlayAndRecord カテゴリを使用します。これらのアプリからの音声は、通常、短い音声プロンプトで構成されています。再生すると、これらのプロンプトは、ポッドキャストやオーディオブックなどの音声を中断し、音楽アプリからの再生などの他のオーディオと混ざり合います。

以下は推奨されるガイドラインである:

  • AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers と AVAudioSessionCategoryOptionDuckOthers オプションの両方を使用して、オーディオセッションを有効にします。
  • 音声出力が必要になるまで、オーディオセッションをアクティブにしないでください。
  • 音声出力された後は、常にオーディオセッションを非アクティブにする。
  • 中断されたプロンプトの再生を(復帰後に)再開しようとしないでください。

Audio Guidelines for Cooperative Music Apps

(他のアプリが出す音に合わせて自分のアプリで何か演奏するようなものを想定?)

協力な音楽アプリは、他のアプリの再生中に再生するように設計されています。これらのタイプのアプリは AVAudioSessionCategoryPlayback または AVAudioSessionCategoryPlayAndRecord カテゴリを使用し、他のアプリと混在します。

以下は推奨されるガイドラインである:

  • AVAudioSessionCategoryOptionMixWithOthers オプションを使用して、オーディオ セッションをアクティブにします。
  • アプリのUIにスタート/ストップボタンがない場合は、ゲームアプリのガイドラインに従ってください。
  • アプリのUIにスタート/ストップボタンがある場合、ユーザーが再生ボタンを押した時にオーディオセッションをアクティブにします。
  • 遠隔操作のイベントにはかかわらないこと。
  • オーディオUIBackgroundModesフラグが設定されていることを確認する。
  • アプリがユーザーの入力を記録する場合は、requestRecordPermission:メソッドを使用して、ユーザーに入力を記録する許可を求めます。オペレーティング・システムがユーザーにプロンプトを出すことに頼ってはいけません。

Audio Session Categories and Modes

Categories

Modes

旧資料より

モード 組み合わせる
カテゴリ
内容
Default All どのカテゴリに対しても指定できる既定のモードで、デバイスの汎用的な使い方に向いています。
MoviePlayback Playback 動画再生アプリケーション用。
VideoRecording PlayAndRecord
Record
カメラを使ってビデオを取り込むアプリケーション用。
VoiceChat PlayAndRecord VoIP(Voice over IP)アプリケーション用。システム組み込 みの信号処理系で、人の声として最適な形に処理します。
GameChat PlayAndRecord ゲームアプリケーション用。
VideoChat PlayAndRecord FaceTimeなどのビデオチャットアプリケーションに向いてい ます。システム 組み込みの信号処理系で、人の声として最適な形に処理します。
SpokenAudio Playback
Measurement PlayAndRecord
Record
Playback
システム組み込みの信号処理系による加工を最小限に抑え たいアプリケーション向け。

History

元資料が変更になって、この記事が対応したこと書く欄です。気になる部分をちょっと変更した程度のことは書きません。
2024-2-29 元資料の2017-09-19版に対応

Discussion