この記事のURL

http://www.dango-itimi.com/blog/archives/2013/001154.html


FLASH tips モバイルブラウザ サウンド再生周り調査: HTML5 audio, Web Audio API, SoundJS

Android や iOS のブラウザ上ではサウンド再生周りに制限がある、という情報は以前から少々目にしていましたが、まずは深くは考えず PC 優先で CreateJS にてサンプルゲーム制作を進めていました。
大まかな形になってきた所で、Android nexus7 にて動作確認をしてみたところ、案の定まったく音が再生されないという状況に。

何が問題なのかを理解するために、現時点での Android と iOS 端末のブラウザ上では サウンド再生に関する制限事項がどのようなものなのか、サウンド再生用ライブラリ SoundJS を通じて調査を行いました。

SoundJS

次期バージョンドキュメント

現在の SoundJS のバージョンは 0.3.0 です。次期バージョン 0.4.0 は SoundJS の github のサイトにて公開されており、仕様は以下の URL 内のファイルをダウンロードする事で確認できます。SoundJS_docs-NEXT.zip が次期バージョンの SoundJS ドキュメントとなります。

 https://github.com/CreateJS/SoundJS/tree/master/docs

SoundJS 0.4.0 のドキュメント内容を見てみると、サウンド再生用クラスに WebAudioPlugin というものが追加された事がわかります。WebAudioPlugin を利用する事で「Web Audio API」と呼ばれるブラウザの仕組みでのサウンド再生が可能との事です。SoundJS 0.3.0 でも利用していた HTMLAudioPlugin は html5 の audio タグでサウンドを再生します。

SoundJS 0.4.0 のデフォルト設定では、WebAudioPlugin が優先的に利用され、Web Audio API に対応していない環境では HtmlAudioPlugin が利用されるようになります。

html5 audio タグ

私が作成していたサンプルゲームでは現状で最終リリース版の SoundJS 0.3.0 を利用しているため、サウンド再生は html5 の audio タグを用いて行われていた事になります。SoundJS 0.4.0 の HTMLAudioPlugin の項を見てみると、既知の問題として Android では以下の点が挙げられていました。

・スクリプトによる音量調節は不可
・ユーザーの何かの操作をトリガーとした場合のみサウンド再生が可能
・サウンドをループさせることは不可能

iOS の html5 audio タグに関してましては結構問題が多いようで、以下のサイトが参考になります。

 iOS における HTML5 の audio 要素に関する制約を克服する
 http://www.ibm.com/developerworks/jp/web/library/wa-ioshtml5/

これら Andorid と iOS の制限事項から、html5 audio タグ(HtmlAudioPlugin)でのサウンド再生は PC のようにはいかない、という事がわかります。

Web Audio API

SoundJS 0.4.0 の WebAudioPlugin の既知の問題の項を見てみると、以下の iOS6 に関しての記述のみが挙げられています。

・サウンドは初めはミュート状態で ユーザが画面タッチを行うとミュートが解除される

問題点がこれだけなので、Web Audio API を用いれば、PC での html5 audio タグでのサウンド再生とほぼ同じ事が可能なのではないか?と考えられます。

Web Audio API はどれくらいの環境でサポートされているのか、以下の URL に挙げられてました。

 http://caniuse.com/audio-api

現在の所 モバイル端末では iOS6 の Safari のみ、との事で Android での利用はできません。Android で利用できるようになったとしても、制限無しで Web Audio API すべての機能が利用できるようになるかどうかは不明です。

まとめ

Android の html5 audio タグによるサウンド再生制限事項から、現状 PC 版 モバイル版 全てで同じ動作を行うものを作ることは難しい状況です。工夫すればなんとかなりそうではあります。ゲームの BGM はイントロのみを流す感じにして、スタートボタンを押した時のみ再生するようにする、等。

iOS に関しましては iPhone 3GS といった古い端末でも iOS6 といった最新の OS へのアップデートは可能なのでしょうか?可能ならば Web Audio API を利用していけばよさそうです。不可能な場合、iOS6 より前のバージョンの OS は サウンド再生周りは諦めるか、上述で挙げた URL「iOS における HTML5 の audio 要素に関する制約を克服する」内にある「オーディオ・スプライト」と呼ばれる方法を採るしかなさそうです。

[ FLASH ] [ tips ] 投稿者 siratama : 2013年01月25日 12:31

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/1114

コメント

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]