投稿日:2013-03-16 Sat
フッチーです。クリエイトウェーブはスマートフォンのHTML5ゲーム案件の相談が多くなってきました。
もちろんActionScript3相談も未だ多いですが、unityとHTML5ゲームの方が比率が大きくなってきてるのは確か・・
さて、iOSのsafariで音声を再生する時に、タッチイベント時にしか再生出来ないという内容の情報を良く目にしますが、これは大きな間違いです。あまりにそういう情報が多いので自分もしばらく勘違いしてました。
音声再生にタッチイベントが必要なのではなくて、音声ファイルをロードするのにタッチイベントが必要なのです。
一度読み込まれた音声は破棄しない限り、何時でも好きなタイミングで再生する事が出来ます。
ゲームなどでは、音声が遅延するのは致命的なので、いわばプリロードさせる為にタッチイベントが必要という事になります。
例えば、タッチされた瞬間に
var audioObj = new Audio("音声ファイルのパス");
audioObj.addEventListener("canplay", function()
{
//ここが呼び出されるとロード完了
});
audioObj.load();
もっと良い書き方あるかもしれないけど、自分はこんな風にかいてます。
後はタッチイベント関係なしに好きなときに
audioObj].play();
とかしてやれば音声は再生されるようになります。
iOS5までは、1音のみしか再生されず同時再生は不可能でしたが、iOS6は出来るようです。 何音までOKなのか未だ把握していないです。
アンドロイドは、タッチイベント要るのか自分も未だ把握してないけれど同じ方法で、とりあえず手元にあるアンドロイド4と2.3の機種は同じ方法で再生されました。OGGは出来る機種と出来ない機種があったけど、Mp3とAACは実験した端末は全てうまくいった。
どこかのサイトでAACはアンドロイドはサポートしてないみないな情報をみたんですが違ったようです。
OS4はともかく、2.3は全機種音声再生されるのだろうか? 2.2はブラウザに、そもそも音声コーデックが載ってないとかで再生不可能なのですが、2.3は機種によってはという内容の情報を見た気がする・・・
とても気になってます。
テーマ:JavaScript - ジャンル:コンピュータ
△ PAGE UP