iPhoneにおけるサイレントモード

http://pmakino.jp/tdiary/20080916.html#p01

先日電車の中で眠りたくて iPhone のアラーム機能で目覚まししようと思ったら、マナーモードにしてヘッドホンつないでいてもスピーカーからアラーム音が鳴ることに気づいた。

このあたりの挙動は、iPhoneを使ってる人で驚かなかった人はいなかったのではないかと思います。自分も驚いて色々調べました。結論から言えば「サイレントモードをオンにすると、着信音のように『明示的にユーザのアクションがなく、暗黙的・強制的に鳴る音』は消音されるが、『明示的なユーザのアクションの結果としての音』(つまりゲームだったり音楽再生だったり、ですね)、は消音されない」というものでした。どうやらこれは現段階では仕様で、Appleは変えるつもりはないようです。

フツーの日本人的感覚では、マナーモードといったら、公共の場で何がなんでも音を出さないために使うものと思われるため、このAppleのポリシーとのあまりの違いに目眩を感じました。MOSAIC.WAV電波ソングが会社のオフィスでスピーカーから流れたら、ちょっといたたまれない気分になりますからね。

その後いろいろ試したところ、「音量」はヘッドホン装着時とヘッドホンを外したときで独立に設定されているという新発見がありました。音楽を聴きながら音量をいじるとき、スピーカーから音が出てるときはスピーカーの音量が設定出来ますが、いったんここで無音にしてもヘッドホンをつなぐとヘッドホンのときの音量に変わります。ヘッドホンでまた別に音量を設定しても、ヘッドホンを外すと以前にスピーカー使用時に設定した音量に変わります。つまり、ヘッドホンを外して音楽を再生しているときにスピーカーの音量を絞れば、以降、『明示的なユーザのアクション』に対しては音が出ることを心配しなくていいということです。なので、サイレントモードに加えてスピーカー音量0、が少なくとも公共の場では必要そうだということになります。

さて、今回問題になっているアラームですが、さらにこいつはこれらのポリシーの枠外にあります。どうやら、アラームの音量は着信音にヒモ付いてるみたいなんですよね。ボリュームキーによる変更は、コンテキストに依存していて、音楽再生時は音楽のボリューム、再生してない時は着信音のボリューム、というように動作します。アラームが鳴っているときに音量を調整しようとすると、着信音のボリュームになり、かつきちんとそれには追随するので着信音のボリュームにヒモ付いていることは確かです。しかし、サイレントモードにすればサイレントになるはずの着信音の枠内にもかかわらず、アラームはサイレントモードを参照していない。着信音のボリュームは完全に0にする設定には出来ないので(サイレントモードを使えってことだろう)、無音にする枠組みがないってことなんですね。これは、個人的な印象ではバグなので、Tell Usするなり、バグ登録をするなりしたほうがよさそうです。まあ、もう誰かがやってるでしょうけれども。

この、サイレントモードか否かの参照は、どうもアプリに任されているようにも見えます。アプリによっては、サイレントモードにしていると音が鳴らないようになっているものもありますし、そうじゃないものもある。アラームも公式アプリと考えれば、この動作もまあ理解できます。このあたりは、本来はOSがきちんとやるべきところのものであるわけですけれども。いまのポリシーはいまのポリシーで、まあ一貫していると言えなくもないのですが……(アラーム以外は)。こんなバグが出てしまうのは、そもそもフレームワークだったり音声出力ポリシーが間違っていると考えたほうが正しそうですが。

以上、だから何だというわけではない仕様解説でした。