iOS Apps Developer's Note

Audio Session Top

11. Audio Session管理

これまで延々と説明してきた内容はAudio Sessionというオブジェクトを通して、アプリがiOS機器の中でどのようにオーディオ環境を使いたいか、また使うことができるのか ということである。これはAudio Sessionとしては一番外側の、しかし最も重要な部分である。

ここまでのカテゴリ、オプション、モードという3つの設定に関しては、AVAudioSessionのドキュメントでいう「Management an Audio Session」という項に分類される メソッドおよびプロパティに含まれている。
Management an Audio Sessionに分類されているメソッドとプロパティの一覧を以下に示す。
  • category (property)
  • categoryOptions (property)
  • – setCategory:error:
  • – setCategory:withOptions:error:
  • mode (property)
  • – setMode:error:
  • – setActive:error:
  • – setActive:withOptions:error:
まずは、設定のメソッド群だ。
  • – setCategory:error: --- カテゴリの設定をする
  • – setCategory:withOptions:error: --- オプション付きでカテゴリの設定をする
  • – setMode:error: --- モードの設定をする
すでに説明したように、カテゴリやオプション、モードの設定には有効な組み合わせと無効な組み合わせがあった。
上記のメソッドを見た通り、オプションは独立して設定することはできず、カテゴリを設定するときに一緒に指定しなければならない。
モードは独立して設定できる。しかし、モードを設定して、あとからカテゴリを設定した時、モードがそのカテゴリでサポートされていない場合、 モードはDefaultに戻されてしまう。
また、カテゴリとオプションの組み合わせが無効だった場合はエラーになる。
カテゴリを設定したあと、無効なモードを設定するとやはりエラーになる。
確実な手順としてはsetCategory:withOptions:error:メソッドでカテゴリとオプションを設定し、そこでエラーにならなかったことを 確認し、それからsetMode:error:メソッドでモードを設定し、ここでもエラーにならなかったことを確認するのが良いだろう。
設定されたカテゴリ、オプション、モードはプロパティでそれぞれ確認できる。
  • category (property)
  • categoryOptions (property)
  • mode (property)
これらのプロパティはどれもリードオンリーで直接ここに値を設定することはできない。
なぜなら無効な組み合わせかどうかをすべてチェックして有効な組み合わせにしかならないようにしているからである。

ここで設定に関して注意することがある。
前述の手順、カテゴリ&オプション、モードの順で設定してそれぞれがノーエラー、という手順に従っていれば間違いないが、
例えば、PlayAndRecordカテゴリでオプション無し、それからVoiceChatモードを設定をすると、 categoryOptionの値は4、すなわちAllowBluetoothオプションがセットされている。
VoiceChatモードを選択することで、あとからAllowBluetoothオプションが設定されるからである。
しかし、そのままもう一度PlayAndRecordカテゴリでオプション無しを設定すると、ここで一度AllowBluetoothオプションがクリアされてしまう。
しかし、すでに設定されているVoiceChatモードはPlayAndRecordカテゴリでは有効な組み合わせのため、VoiceChatモードはDefaultモードには 戻らない。
この状態でモードをもう一度VoiceChatモードに設定しても、モードが変わっていないため何もしないようなのである。
つまり、AllowBluetoothオプションをセットするという副作用が働かないのである。
これはVideoChatモードも同様だった。

これらのことからカテゴリ、オプション、モードは有効な組み合わせが設定されるように設定メソッドがチェックし、 プロパティに反映する、という役割を持っていることになる。
では実際にそれがアプリのAudio Sessionとして有効になるのはいつなのか。

次に、Audio Sessionのアクティベートについて説明しよう。

PrevNext