🎶

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

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は再生/一時停止ボタンまたは録音/一時停止ボタンを含みます。

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

  • アプリがフォアグラウンドに入ったら、ユーザーが再生ボタンまたは録音ボタンを押すまで待ってから、オーディオセッションをアクティブにします。
  • アプリがフォアグラウンドにある間は、割り込みを受けない限りオーディオセッションをアクティブに保ちます。
  • アプリがバックグラウンドに遷移する際に、オーディオの再生や録音が実行中でない場合は、そのオーディオセッションを非アクティブにします。これにより、そのオーディオセッションが、ミキシング不可能な別のアプリやシステムにより中断されるのを防ぐことができます。(in response to the app being suspendedの意味が不明)
  • 再生または録音が中断されたときに、一時停止したことを示すように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にして、測定モードを設定し、信号処理を最小限にします。また、このタイプのアプリは他のアプリと混在させないようにします。

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

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

Audio Guidelines for Browser-like Apps That Sometimes Play Audio

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

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

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

Audio Guidelines for Navigation and Workout Apps

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

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

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

Audio Guidelines for Cooperative Music Apps

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

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

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

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

Audio Session Categories and Modes

アプリでオーディオをどのように使用するかを表明するために、オーディオセッションカテゴリを指定します。表B-1に、利用可能な各カテゴリの詳細を示します。カテゴリの仕組みについては、オーディオセッションの設定(Configuring an Audio Session) を参照してください。

Categories

表 B-1 オーディオセッションカテゴリーの振る舞い

カテゴリー マナーモードスイッチに従う 他のnonmixable appのオーディオに割り込む 対応する入出力
Ambient Yes No 出力
SoloAmbient(Default) Yes Yes 出力
Playback No デフォルトでYes/混ざる設定ならNo 出力
Record No(スクリーンロックでも録音を継続) Yes 入力
PlayAndRecord No デフォルトでYes/混ざる設定ならNo 入力/出力
MultiRoute No Yes 入力/出力

Note:
マナーモードスイッチがサイレントに設定され画面がロックされているときに、アプリがオーディオを再生し続けるには、UIBackgroundModesオーディオキーがアプリのInfo.plistファイルに追加されていることを確認してください(またはXcode上の操作で可能)。正しいカテゴリを使用することに加えてこの要件が必要です。

Modes

表B-2に、モードと各モードで使用できるカテゴリの一覧を示します。

旧資料の情報も使用した。

表B-2 モードと関連するカテゴリー

モード 組み合わせる
カテゴリ
内容
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