[iOS SDK] iPhone/iPad はサイレントモードにしても音が鳴る
この前、iOS5 を入れた iPad2 で おんぷちゃん for iPad から音が鳴らない、ほかのアプリからは音が鳴っているのでおんぷちゃんの問題ではないか、というレポートがユーザの方からあり、かなり急いで手元の iPad2 にiOS5を入れて試したところ、普通に音が鳴っていたので一安心した。
その後いろいろ調べていたところ、ユーザの方から、実は iPad2 がサイレントモードになっていたとの報告があり、一件落着した。
しかしその際にいろいろ試していたところ、実際には iPad をサイレントモードにしても、YouTube や iPod アプリからは音が鳴ることが判明した。
ユーザの方も、ほかのアプリ(こどもえいごずかん、Virtuoso)はサイレントモードになっていても音が鳴っていたとのことだった。これにより、おんぷちゃんの問題ではないかと判断されたとのことだった。
そういえば、確かにiPhone Core Audioプログラミングを読んだときにそういうことが書いてあった気がするが、実際に試したことはなかった。
確かに、Appleのオーディオセッションプログラミングガイド 2010-11-15 によると、
AVAudioSessionCategoryPlayback またはこれと同等の kAudioSessionCategory_MediaPlayback— このカテゴリは、オーディオ再生が最も重要なア プリケーションに対して使います。アプリケーションのオーディオは、画面がロックされた状 態や、着信/サイレントスイッチがサイレントに設定された状態でも再生します。
と書いてある。
| カテゴリ識別子 | 着信/サイレントスイッチや画面のロックによって消音する | ほかのアプリケーションからのオーディオを許可 | オーディオ入力(録音)と出力(再生)を許可 | 
| AVAudioSessionCategoryAmbient kAudioSessionCategory_AmbientSound | o | o | 出力のみ | 
| AVAudioSessionCategorySoloAmbient kAudioSessionCategory_SoloAmbientSound | o | x | 出力のみ | 
| AVAudioSessionCategoryPlayback kAudioSessionCategory_MediaPlayback | x | デフォルトではx | |
| AVAudioSessionCategoryRecord kAudioSessionCategory_RecordAudio | ×(画面がロックした状態でも録音は 継続) | x | 入力のみ | 
| AVAudioSessionCategoryPlayAndRecord kAudioSessionCategory_PlayAndRecord | x | デフォルトではx | 入力および出力 | 
| AVAudioSessionCategoryAudioProcessing kAudioSessionCategory_AudioProcessing | – | x | 入力、出力ともx | 
サイレントモードでも音が鳴るアプリはカテゴリに AVAudioSessionCategoryPlayback を指定しているのだろう。
確かにこうやって問題としてレポートが来たりすることを考えると、AVAudioSessionCategoryPlayback を指定していた方が安全だったりするとは思うが、しかしこれを使うとサイレントモードにしていても音が鳴ってしまうのでそれはそれで問題があると思うのだが。
Webを検索してみると、サイレントモードでも音が鳴ることに関してはバグとしてとらえている人も結構いることがわかった。
確かに、日本の携帯のマナーモードの挙動を考えると、音が鳴るのは驚きだと思う。
ところで、これを調べている間に知ったのだが、iPhone や iPad では音量ボタン-を押し続けると、一瞬で消音状態になる。
おそらくサイレントモードでも消音にならない場合はこの機能を使えということなのだろう。
また元の音量に戻すためには地道に+ボタンを押し続けるしかないのだが。
追記 2011/12/04
リズムくんのレビューでもメトロノームの音が鳴らないと書かれていて、こちらの方もおそらくサイレントモードになっているのではないかと。
iPhoneはともかくiPadのサイレントモード指定はわかりづらくなっているので、あきらめて今回のアップデートで AVAudioSessionCategoryPlayback に変更してみようかと。
このアプリは cocos2d の CocosDenshion を使っているが、CocosDenshion で AudioSessionCategory を変更する場合、(void) setMode:(tAudioManagerMode) mode を使えばよい。
指定するモードは下記の通りだった。
typedef enum {
	kAMM_FxOnly,					//!Other apps will be able to play audio
	kAMM_FxPlusMusic,				//!Only this app will play audio
	kAMM_FxPlusMusicIfNoOtherAudio,	//!If another app is playing audio at start up then allow it to continue and don't play music
	kAMM_MediaPlayback,				//!This app takes over audio e.g music player app
	kAMM_PlayAndRecord				//!App takes over audio and has input and output
} tAudioManagerMode;
ということで、kAMM_MediaPlayback を指定することにする。
追記 2012/01/17
「リズムくん」の前回のアップデートで、サイレントモードでも音を再生する AVAudioSessionCategoryPlayback に設定したところ、やはりサイレントモードで音が再生されるのは不便との意見があった。
このため、元の仕様に戻そうかと考えているが、上記の通りサイレントモードで音が鳴らないと不具合として報告が来たりするため、何らかの対策は入れたい。
対策として、サイレントモードで起動された場合にはサイレントモードでは音が再生されない旨のメッセージを表示することを考えたが、どうやら iOS 5 からはサイレントモードの状態を取得できなくなっているようだ。
iphone – Detect Silent mode in iOS5? – Stack Overflow
理由は分からないが、どうも意図的に取得できないようにしている模様。
確かに Apple の Developer Forums でそういう書き込みがあった。この機能が必要であれば、Bug Reporter にリクエストしてくれとのこと。
書くか…
この件、こういう事件も起きている模様。
iPhoneは設計が間違ってる、もしくは情弱が使っちゃいけないモノらしい
確かにサイレントモードにしたら安心しそうではあります。
誰も書いていないけれども音量-ボタンをちょっと押しっぱなしにすれば完全ミュートになるのですが。
しかし、この仕様は昔からあるものだし、Appleの回答を見ても明らかに意図した動作になっている。
確かに、iPod touch にはサイレントモードのスイッチがないし、iPhoneにも将来ずっとサイレントモードがあるかは不明。
また、iPad はスイッチがあるがサイレントモードのOn/Offと、画面の回転のOn/Offのスイッチの切替式になっている。
| iPhone Core Audioプログラミング | |
|  | 永野 哲久ソフトバンククリエイティブ 2009-11-12 売り上げランキング : 113825 by G-Tools | 
関連記事
-  
                              
- 
              NSInternalInconsistencyException久しぶりにiOS6以前のアプリをビルドしたら NSInternalInconsistencyExce 
-  
                              
- 
              [iPhone アプリマーケティング] Yappler.com に登録してみたたまたま検索していて発見した、Yappler.com に試しに登録してみた。 iPhoneアプリ開発 
-  
                              
- 
              スマートフォン手袋を買ってみた 2011去年買ったスマートフォン用手袋は石油くさくてかなりつらい思いをしながら使ってましたが、今年もこりず 
-  
                              
- 
              [iOS SDK] アプリを起動しない 3D quick action は実現できるかiPhone 6s / iPhone 6s Plus から 3D Touch 機能が搭載されたが、搭 
-  
                              
- 
              おんぷちゃん for iPad 大譜表モード+MIDI対応を追加しましたおんぷちゃん for iPad: ぽこ・あ・ぽこ の方がおんぷちゃん for iPad を紹介してく 
-  
                              
- 
              iPhoneアプリ 「リズムくん」 Ver.1.1 アップデートリズムくん Ver.1.0ではまずは8分音符までの問題でリリースしてみましたが、やはりより難しい問題 
-  
                              
- 
              simplism 0.7mm Ultra Thin Case for iPhone 6 Plus(5.5inch)購入Amazonを見ているとiPhone 6 Plus の筐体はそれなりに傷が付きや 
-  
                              
- 
              [iPhone SDK] iAd 組み込みでひっかかったことiAd は iAd Programming Guide を読んだりすればとても簡単にアプリへの組み込 
-  
                              
- 
              [iOS SDK] NSUserDefaults boolForKey でNOが返ってくるとNOが格納されていたのか値が存在しなかったのかが不明NSUserDefaults Class Reference にあるとおり、NSUserDefau 
-  
                              
- 
              [iPhone 開発関連本] SQLite入門 第2版 西沢直木SQLite はそれなりにクセがあるらしく、今までに入手した知識とFMDBのソースコードだけ(FMD 

 
         
         
         
        