SlideShare ist ein Scribd-Unternehmen logo
1 von 61
Downloaden Sie, um offline zu lesen
HTML5 Audio
Mobile
WebAudio / HTMLAudio / HTMLVideo
- boombox.js -
Kei Funagayama
Frontrend Vol.7 powered by CyberAgent, Inc.
自己紹介
船ヶ山 慶
エンジニア
twitter: @fkei
agenda
● サポート状況
● WebAudio
● HTMLAudio
● HTMLVideo
● Events
● Cache
● User Events
● App Backgroud
● multi sound
● CORS
● Audio Sprite
サポート状況
環境別
Mobile
PC
WebAudio
ゲームやサウンドに特化したWeb Application な
どのサウンド処理を想定した高レベルでパワフル
なAPI
概要
従来のHTMLAudioでは出来ない高度な
サウンド操作が可能です。
“modular routing”で設計
されています。
特徴
フィルタ ミキシング
エフェクト
合成
編集
https://developer.mozilla.org/ja/docs/Web_Audio_API
基本フロー
mp3 XMLHttpRequest
distination
AudioBufferSourceNode
decodeAudioData(arraybuffer)
AudioBuffer << arraybuffer
load (arraybuffer)
decode
set
connect
(webkit)AudioContext
※ 1
※ 2
※ 3
※ 4
変換
XHR 読み込み
var xhr = new XMLHttpRequest();
xhr.onload = function (e) {
// data: xhr.response
}
xhr.open('GET', ‘http://example.com/sound.m4a’, true);
xhr.responseType = 'arraybuffer';
xhr.send();
AudioContext
AudioBuffer
登場人物(1)
サウンド全体を管理 通常1インスタンスだけ作成
audio asset
AudioBufferをコピーした音源ソース
インスタンス数に制限あり
var AudioContext = window.webkitAudioContext || window.AudioContext;
var ctx = new AudioContext();
ctx.decodeAudioData(xhr.response, function success(audiobuffer) { … }, function error() { … });
再利用可能
AudioBufferSourceNode
GainNode
登場人物(2)
AudioBufferを管理、操作 再利用不可 使用後は再作成が必要 (一時停止から再生の場合も )
その他 : MediaElementAudioSourceNode, MediaStreamAudioSourceNode
var source = ctx.createBufferSource()
音量管理 再利用可
var gainNode = ctx.createGain();
source.connect(gainNode);
gainNode.gain.value = 0.5;
gainNode.connect(ctx.destination);
操作(1)
AudioBufferSourceNode.start(0, offset, duration);
AudioBufferSourceNode.noteGrainOn(0, offset, duration);
0 = 再生待ち(sec), offset = 音源の開始位置(sec), duration = 再生時間(sec)
AudioBufferSourceNode.stop(0);
AudioBufferSourceNode.noteOff(0);
0 = 停止待ち(sec)
再生
停止
操作(2)
AudioBufferSourceNode.loop = true;
setTimeout + ended event でも可能
AudioBufferSourceNode.disconnect();
ループ再生
切断
再生関数の引数(offset, duration)で制御
一時停止 / 途中再生
操作(3)
AudioGainNode.gain.value = 1; // range 0-1
音量
distination
AudioBufferSourceNode1GainNode1
(webkit)AudioContext
GainNode2
GainNode3
AudioBufferSourceNode2
AudioBufferSourceNode3
volume:1
volume:0.3
volume:0.7
connect
HTMLAudio
読み込み
<audio src=”xxx.mp3”></audio>
var $el = new window.Audio();
JavaScript
DOM
操作(1)
HTMLAudioElement.play();
HTMLAudioElement.pause(); // 一時停止
HTMLAudioElement.currentTime = 0; // 再生位置
再生
停止
HTMLAudioElement.loop = true;
ループ
操作(2)
HTMLAudioElement.volume = 1; // range 0-1
HTMLAudioElement.pause(); // 一時停止
var pauseTime = HTMLAudioElement.currentTime; // 再生位置
音量
一時停止
HTMLAudioElement.currentTime = pauseTime; // 再生位置
HTMLAudioElement.play(); // 再生
途中再生
HTMLVideo
HTMLAudio と基本操作は同じ
サウンドだけ利用する場合は
Elementだけディスプレイ外に飛ばす
Audio
Media type
WAV, MP3, AAC, OGG, M4A …...
iOS, Android
MP3, M4A
ブラウザ別に対応状況は異なります。
new Audio().canPlayType(“audio/mp3”);
> “maybe” // OK
new Audio().canPlayType(“audio/aac”);
> “” // NG
HTMLAudio / HTMLVideo
Events
ended : 再生終了
loadstart : 読み込み開始
progress : ダウンロード
abort : 読み込み中止
error : 読み込み中エラー
canplay : 再生開始可能だが、すべてをロードしていない
volumechange : 音量変更
suspend : ロード一時停止
loadeddata : 再生可能
stalled : ロードしているが、予期しない理由で止まっている
他にもあります
Audio
Cache
JSメモリキャッシュ
ブラウザキャッシュ
HTMLAudioやAudioBufferなど
サウンドファイルデータ
スマートフォン
User Events
スマホの場合、サウンド操作は
User Events からしか操作出来ません。
document.body.addEventListener(‘touchstart’, function (e) {
// sound operation …...
})
setTimeoutやブラウザが自動で発火させるイベントは不可
スマートフォン
Background events
Homeボタン/タブ遷移 イベント
document.(vendor prefix)visibilitychange
window.focus / window.blur
window.onpageshow / window.onpagehide
Android 2.x 固有の現象
バックグラウンドのイベント取得が
できず、再生を止める事ができない。
複数音 同時再生
Android 4.x 2音
HTMLAudio / HTMLVideo のサウンド
出力は別になっているようです。
別々に1音づつ再生しましょう。
CORS
DOMElement準拠です。
HTMLAudio / HTMLVideo
crossorigin属性
anonymous use-credentials
WebAudio
XHR 準拠です。
サウンド配信サーバでHeaderを設定する必要があります。
HTTP Response header
Access-Control-Allow-Origin : “http://example.com”
Android 2.3
XHR / GET は利用できません。
WebAudioをサポートしていないため考えない。
Audio Sprite
Audio
概要
CSS Sprite と考え方は同じで、複数のサウンドを
つなげて一つのAudio ファイルにします。
メリット
CSS Sprite と同じです。
1 requestで複数のサウンドを取得することが出来ます。
同一音源 を使用した複数同時再生は出来ません。
一部 Android 2.3 で動作しません。
HTMLAudio / HTMLVideo
WebAudio
同一音源 を使用した複数再生が可能です。
WebAudioをサポートしていれば利用可能です。
利用シーン
16/32kbps で短いサウンドをつなげて、
1 requestで利用する。
逆に、128/256kbps で長いサウンドをつなげると、
1 requestが専有されるので注意が必要です。
サウンドファイルサイズと用途で使い分ける
まとめ
Audio
WebAudioが一番汎用的に利用することが出来ます。
Androidは、WebAudioがサポートされていない物が多い
最新の端末であればWebAudio対応も増えてきている
PC : ie,firefox,safari,opera,chrome
Mobile: iOS, Android
イベントやAPI、サポート状況がかなり違う
https://github.com/CyberAgent/boombox.js
HTMLVideo, HTMLAudio, WebAudioを包括したブラウザ向
けサウンドライブラリ
HTML5 Audio系APIを統一したAPIで提供し、ラジカセ
(boombox)のようなシンプルな操作で利用する事が可能
スマートフォン向け必須機能を標準搭載
コンセプト
Play
Pause
Stop
Replay
Resume
スマホ専用機能
Volume
ループ再生
機能
複数サウンド再生
CORS
Filterings
audiosprite
生成コマンドサポート
boombox-audiosprite
gzipped 6kb filesize
QuickStart
$ npm install boombox.js
$ bower install boombox.js
$ component install CyberAgent/boombox.js
Download
https://github.com/CyberAgent/boombox.js/releases/download/1.0.0/boombox.min.js
Load
<script type="text/javascript" src="YOUR/PATH/TO/boombox.min.js"></script>
support require.js
// boombox running
boombox.setup();
var options = {
src: [
{
media: 'audio/mp4', // *1
path: 'http://example.com/sound.m4a' // *2
}
]
};
boombox.load('single', options, function (err, htmlaudio) { // *3
$(‘body’).append(htmlaudio.$el); // *4
boombox.get(‘single’).play(); // *5
});
便利な機能
1つのサウンドファイルに複数のAudioファイルを定義すること
で自動で利用可能なものをロード
タイムアウト機能
setTimeoutを使ったオリジナルループ再生
WebAudio/HTMLAudio を自動で選択
JSメモリキャッシュ搭載
スマホのバッググランドイベントをキャッチ
AudioSprite ファイル生成コマンド対応
specフォルダ / jsfiddleに多数のサンプルコード
フィルタ機能による端末別の挙動を変更
DEMO
HTML5 toolkit
宣伝
https://github.com/CyberAgent/beez
http://www.html5rocks.com/ja/
https://developer.mozilla.org/ja/docs/Web_Audio_API
参考サイト
@fkei
ご静聴ありがとうございました

Weitere ähnliche Inhalte

Ähnlich wie Frontrend vol.7 html5 audio

Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Pathdynamis
 
日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話Tatsuya Matsumoto
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalkShozo Okada
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalkShozo Okada
 
Firefox5+HTML5×5
Firefox5+HTML5×5Firefox5+HTML5×5
Firefox5+HTML5×5dynamis
 
Firefox Ecosystem in Kagoshima
Firefox Ecosystem in KagoshimaFirefox Ecosystem in Kagoshima
Firefox Ecosystem in Kagoshimadynamis
 
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニックUnityTechnologiesJapan002
 
About kitakat
About kitakatAbout kitakat
About kitakathidenorly
 
Ipad software development
Ipad software developmentIpad software development
Ipad software developmentvinicorp
 
I padsoftwaredevelopment
I padsoftwaredevelopmentI padsoftwaredevelopment
I padsoftwaredevelopmentVu Hung Nguyen
 
bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2 bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2 BeatCraft
 
Windows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトWindows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトnormalian
 
WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門)
WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門)WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門)
WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門)Ryo Koizumi
 
H T M L5 入門編
H T M L5 入門編H T M L5 入門編
H T M L5 入門編ngi group.
 
Windows phoneのバックグラウンドエージェントについて
Windows phoneのバックグラウンドエージェントについてWindows phoneのバックグラウンドエージェントについて
Windows phoneのバックグラウンドエージェントについてKiyokazu Kaba
 
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編Takafumi Inamori
 
PlayFramework1.2.4におけるWebSocket
PlayFramework1.2.4におけるWebSocketPlayFramework1.2.4におけるWebSocket
PlayFramework1.2.4におけるWebSocketKazuhiro Hara
 
第九回ネットワークチーム講座資料
第九回ネットワークチーム講座資料第九回ネットワークチーム講座資料
第九回ネットワークチーム講座資料nanametown
 

Ähnlich wie Frontrend vol.7 html5 audio (20)

HTML5最前線
HTML5最前線HTML5最前線
HTML5最前線
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Path
 
日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk
 
Firefox5+HTML5×5
Firefox5+HTML5×5Firefox5+HTML5×5
Firefox5+HTML5×5
 
Firefox Ecosystem in Kagoshima
Firefox Ecosystem in KagoshimaFirefox Ecosystem in Kagoshima
Firefox Ecosystem in Kagoshima
 
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
 
About kitakat
About kitakatAbout kitakat
About kitakat
 
Ipad software development
Ipad software developmentIpad software development
Ipad software development
 
I padsoftwaredevelopment
I padsoftwaredevelopmentI padsoftwaredevelopment
I padsoftwaredevelopment
 
bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2 bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2
 
Windows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトWindows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイト
 
WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門)
WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門)WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門)
WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門)
 
H T M L5 入門編
H T M L5 入門編H T M L5 入門編
H T M L5 入門編
 
Windows phoneのバックグラウンドエージェントについて
Windows phoneのバックグラウンドエージェントについてWindows phoneのバックグラウンドエージェントについて
Windows phoneのバックグラウンドエージェントについて
 
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
 
【らぼ★ろぐ】jPlayerの紹介
【らぼ★ろぐ】jPlayerの紹介【らぼ★ろぐ】jPlayerの紹介
【らぼ★ろぐ】jPlayerの紹介
 
PlayFramework1.2.4におけるWebSocket
PlayFramework1.2.4におけるWebSocketPlayFramework1.2.4におけるWebSocket
PlayFramework1.2.4におけるWebSocket
 
第九回ネットワークチーム講座資料
第九回ネットワークチーム講座資料第九回ネットワークチーム講座資料
第九回ネットワークチーム講座資料
 

Kürzlich hochgeladen

UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Kürzlich hochgeladen (9)

UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

Frontrend vol.7 html5 audio