スマホでは、音声の自動再生が認められていないので、必ずユーザーのアクション(タップなど)が必要になります。
Audio Spriteを使えば、一度のアクションで複数の音声を使うことができます。
Audio Spriteの作成
それでは、Audio Spriteをやってみます。
gulp-audiospriteを選択
サウンドファイルを手動で連結するのは辛いので、ツールが欲しいですよね。
検索すると、いくつか見つかります。
だいたい、audiospriteをベースに作られているようです。
私は、Gulpをよく使うので、gulp-audiospriteを選んでみます。
Gulpを知りたい方は、こちらをどうぞ。
FFmpegのインストール
audiospriteを使うためには、FFmpegが必要らしいのでインストールします。
を見ると、Homebrewのコマンドがあるので、それでインストールするのが良さそうです。
$ brew install ffmpeg --with-theora --with-libogg --with-libvorbis
Audio Sprite作成する
今回は、こちらから素材を頂き、Audio Sprite作成してみます。
Gulpが入っている前提で進めます。
適当なディレクトリを作成します。
とりあえずaudio_spriteとしました。
書き出し前のディレクトリをapp/sounds書き出し後をdist/soundsとしました。
gulp-audiospriteのインストールと実行
$ pwd /Users/morisan/audio_sprite $ npm init (略) $ npm install --save-dev gulp $ npm install --save-dev gulp-audiosprite
gulpfile.js
var gulp = require('gulp'), audiosprite = require('gulp-audiosprite'); gulp.task('audiosprite', function() { gulp.src('app/sounds/*') .pipe(audiosprite({ output: 'sound', format: 'howler', path:'./sounds', loop:['bgm'], log:'debug' })) .pipe(gulp.dest('./dist/sounds')); }); gulp.task('default', ['audiosprite']);
最後にgulpで書き出します。
$ gulp
gulp-audiospriteのオプション
これくらい設定すれば、良いと思います。
詳しくは、tonistiigi/audiospriteを見てください。
output | 1つにまとめられる音声ファイル名です。 |
---|---|
format | 3つのライブラリに対応したJSONを出力できます(jukebox、howler、createjs)。 |
path | JSONに書かれるパスです。 |
loop | ループさせる場合ファイル名を書きます。 |
書き出されるJSONの種類は、デフォルトがjukeboxですが、更新されていないライブラリなので、howlerに変えました。
SoundJSを使う方は、createjsにすれば良いでしょう。
音を鳴らす
howler.jsを使って、音を鳴らしたいと思います。
場面が変わったら効果音が出る、という演出を想定します。
スマホで、タップしてからでないと鳴らない、という縛りから解放されましょう。
audiospriteで書き出されたJSONがhowler.jsのoptionと少し違ったので、修正が必要でした。
sounds/sound.json
{ "src": [//urlsからsrcに変更しました。 "./sounds/sound.ogg", "./sounds/sound.m4a", "./sounds/sound.mp3", "./sounds/sound.ac3" ], "sprite": { "bgm": [ 0, 81409.16099773243, true ], "scene1": [ 83000, 3668.7528344671136 ], "scene2": [ 88000, 9327.165532879817 ] } }
BGMが再生され、scene01、scene02で効果音が自動で流れれば、成功です。
まとめ
iOSは、問題なくいけたと思います。
Androidは、Web Audio APIが使える5以降でないと、うまく動かないみたいです。
もし、動いた、動かないなど、教えていただけるとありがたいです。
また、howler.jsやSoundJS以外にもサイバーエージェントが作ったboombox.jsというものもあります。
デフォルトで、ページを非表示したときに音が止まるのは、良いですね。
そんな感じで、また!
売り上げランキング: 13,696
コメント