SlideShare a Scribd company logo
WebRTC +
              Web Audio API =
              スーパーサイヤ人

                  2013/02/23 #daiNagoyaJS vol.5


13年2月23日土曜日
いつもぎりぎり、
              @girigiribauerです




13年2月23日土曜日
本日のネタは、
              大なごやJS Vol.3で
              話したネタの
              完全版です


13年2月23日土曜日
今日話す内容



13年2月23日土曜日
今日話す内容

              1. 作ってきたコンテンツの概要
              2. デモ
              3. WebRTC, Web Audio API などの話
              4. まとめ



13年2月23日土曜日
13年2月23日土曜日
今日話す内容

              1. 作ってきたコンテンツの概要
              2. デモ
              3. WebRTC, Web Audio API などの話
              4. まとめ



13年2月23日土曜日
WebRTC +




13年2月23日土曜日
WebRTC +
              Web Audio API =




13年2月23日土曜日
WebRTC +
              Web Audio API =
              スーパーサイヤ人


13年2月23日土曜日
ドラゴンボールとは
              • みんな大好きドラゴンボール
              • サイヤ人は、金色の髪のスーパーサイ
                  ヤ人に変身する

              •   変身すると
                  強くなるのは
                  男のロマン
                            映画あるよ! http://www.dragonball2013.com/




13年2月23日土曜日
スーパーサイヤ人に
               なってみたかった


13年2月23日土曜日
元ネタ



13年2月23日土曜日
•    i'm a super saiyan
              http://www.youtube.com/watch?v=lIv88cC86r0


13年2月23日土曜日
•    i'm a super saiyan
              http://www.youtube.com/watch?v=lIv88cC86r0


13年2月23日土曜日
•    i'm a super saiyan
              http://www.youtube.com/watch?v=lIv88cC86r0


13年2月23日土曜日
•    i'm a super saiyan
              http://www.youtube.com/watch?v=lIv88cC86r0


13年2月23日土曜日
•    i'm a super saiyan
              http://www.youtube.com/watch?v=lIv88cC86r0


13年2月23日土曜日
•   i'm a super saiyan
                  http://www.youtube.com/watch?v=lIv88cC86r0


13年2月23日土曜日
•   i'm a super saiyan
                  http://www.youtube.com/watch?v=lIv88cC86r0


13年2月23日土曜日
•   i'm a super saiyan
                  http://www.youtube.com/watch?v=lIv88cC86r0


13年2月23日土曜日
respect!




              •   i'm a super saiyan
                  http://www.youtube.com/watch?v=lIv88cC86r0


13年2月23日土曜日
全力投球の
                中二病は
              coolだと思う


13年2月23日土曜日
そして前回・・・



13年2月23日土曜日
リベンジネタ
              • 実は大なごやJS Vol.3 でやったネタ
               (2012/07/21)

              • 前回は、ホントに軽く作ってみた



13年2月23日土曜日
リベンジネタ
              • あれ、音声がとれない → まだ未実装
              • (本番当日)
               「ク、クリックで・・・
                 代用しました・・・」




13年2月23日土曜日
13年2月23日土曜日
13年2月23日土曜日
まさかのクリック



13年2月23日土曜日
ユーザー体験と
               しては 0点


13年2月23日土曜日
それも
              今や昔の話・・・


13年2月23日土曜日
君もなれる!
        スーパーサイヤ人に!


13年2月23日土曜日
13年2月23日土曜日
今日話す内容

              1. 作ってきたコンテンツの概要
              2. デモ
              3. WebRTC, Web Audio API などの話
              4. まとめ



13年2月23日土曜日
デモ
              •   なれる!スーパーサイヤ人!
                  http://girigiribauer.com/dragonball-super-saiyan/




13年2月23日土曜日
満 足

13年2月23日土曜日
13年2月23日土曜日
今日話す内容

              1. 作ってきたコンテンツの概要
              2. デモ
              3. WebRTC, Web Audio API などの話
              4. まとめ



13年2月23日土曜日
使用した主なAPIなど

              •WebRTC (getUserMedia)

              • Web Audio API
              • Canvas




13年2月23日土曜日
このあたりの話を
               ピンポイントで
                抜粋して紹介


13年2月23日土曜日
使用した主なAPIなど

              •WebRTC (getUserMedia)

              • Web Audio API
              • Canvas




13年2月23日土曜日
WebRTC
                (getUserMedia)
              • RTCは、Real Time Communication
               の略

              • その中の getUserMedia は、
               ローカルにあるカメラ、マイクに
               アクセスできる




13年2月23日土曜日
対応状況
                  (※2013/02/23時点)




              • http://caniuse.com/stream
13年2月23日土曜日
対応状況
                     (※2013/02/23時点)


         •    Chrome, Operaに続いて
              Firefoxも getUserMedia が使える!

         •    Firefoxはabout:configのフラグ付き

         • IEは、そもそもCU-RTC-Webという
              別仕様を推進してる
              (CU: Customizable, Ubiquitous)



13年2月23日土曜日
getUserMedia の
                  基本的な使い方

              • navigatorオブジェクトにある
               getUserMedia メソッド

              • 引数を3つ取る
              • 1つ目は、デバイスの種別指定のオブ
               ジェクト(テキストではない)




13年2月23日土曜日
getUserMedia の
                  基本的な使い方
              • 2つ目は、ローカルデバイスに
               アクセスが出来たときに生成される、
               mediaStream オブジェクトを
               引数にもつ、コールバック関数

              • 3つ目は、上記失敗したときの
               コールバック関数




13年2月23日土曜日
getUserMedia の
                  基本的な使い方
              • そこまで複雑じゃない、数行レベル
              • クロスブラウザな書き方は、
               navigator.getUserMediaに対して
               上書きできないので、
               ちょっと工夫する




13年2月23日土曜日
getUserMedia の
                             基本的な使い方
                     var getUserMedia = function(t, onsuccess, onerror) {
                   if (navigator.getUserMedia) {
                      return navigator.getUserMedia(t, onsuccess, onerror);
                   } else if (navigator.webkitGetUserMedia) {
                      return navigator.webkitGetUserMedia(t, onsuccess, onerror);
                   } else if (navigator.mozGetUserMedia) {
                      return navigator.mozGetUserMedia(t, onsuccess, onerror);
                   } else if (navigator.msGetUserMedia) {
                      return navigator.msGetUserMedia(t, onsuccess, onerror);
                   } else {
                      throw new Error('No getUserMedia implementation found.');
                   }
              };



         •         navigator.getUserMediaごと返す

         • あとはfunctionでラッピングするなり
13年2月23日土曜日
getUserMedia の
                 基本的な使い方
         •    デバイスへの接続がうまくいった後、
              とりあえず表示させるまでの話
              (前回の資料をさらっと再紹介)




13年2月23日土曜日
取得した LocalMediaStream オブジ
         ェクトをきちんと表示するところまで
                    (1)


              • canvas要素を作る、もしくは予め作っ
                た要素を参照する
              • var canvas =
                document.getElementById('canvas');
                var context = canvas.getContext('2d');




13年2月23日土曜日
取得した LocalMediaStream オブジ
         ェクトをきちんと表示するところまで
                    (2)


              •   createObjectURL にさっきの
                  LocalMediaStream オブジェクトを
                  ぶちこんで、BlobURL(リソースを参
                  照してる)を取得する
              • var videoUrl = createObjectURL(stream);


13年2月23日土曜日
取得した LocalMediaStream オブジ
         ェクトをきちんと表示するところまで
                    (2)


              •   デバイスをBlobURLとして受け取るこ
                  とで、同様のインターフェースで扱え
                  る(URL参照 ≒ デバイス参照)

              • Blobは Binary Large OBject の略、
                  FileAPI 周りでよく使われてる



13年2月23日土曜日
取得した LocalMediaStream オブジ
         ェクトをきちんと表示するところまで
                    (3)

              • video タグの src 属性に、
                  さっきの BlobURL をつっこむ
              •   var video = document.getElementById('video');
                  video.src = videoUrl;
                  video.autoplay = true;

              • ※autoplay 属性がないと最初の1コマ
                  だけで止まっちゃうのでつける

              • 単に表示のみなら、ここまででOK
13年2月23日土曜日
取得した LocalMediaStream オブジ
         ェクトをきちんと表示するところまで
                    (4)

              •   あとは連続して canvas に video 要
                  素を反映してやるだけ
              • var render = function() {
                   context.drawImage(video, 0, 0, w, h);
                   requestAnimationFrame(render);
                  };
                  requestAnimationFrame(render);



13年2月23日土曜日
video は分かった
              では audio は?


13年2月23日土曜日
その前に、
               Web Audio API
              を考える必要がある


13年2月23日土曜日
使用した主なAPIなど

              •WebRTC (getUserMedia)

              • Web Audio API
              • Canvas




13年2月23日土曜日
Web Audio API
              • 文字通り、Web の Audio の API
              • ノードというオブジェクト同士を
                  つなぎ合わせることで制御する

              •   中にはAnalyserノード、数値として
                  解析できちゃうものもある

              •   仕様が幅広くて、まだまだ全容把握で
                  きてない

13年2月23日土曜日
対応状況
                  (※2013/02/23時点)




              • http://caniuse.com/audio-api
13年2月23日土曜日
対応状況
                     (※2013/02/23時点)



         •    Chrome, Safari, iOS Safari が使える

         • つい数日前に、Firefox Nightly にて
              Web Audio API がフラグ付きで導入

         • Firefox21 か 22 あたりで
              Web Audio API が正式実装される?



13年2月23日土曜日
対応状況
                     (※2013/02/23時点)




         • Firefox では、about:config から
              media.webaudio.enabled を true に

         • ただし、Firefoxはまだ完全じゃないと
              ころもある(詳しくは後述)
13年2月23日土曜日
Web Audio API で
                    今回やりたいこと
              •   今回やりたいのは、
                  入力から数値として取れるところまで

              •   出力側は必ずしも必要ではない

              • ライブ入力の音声を、リアルタイムに
                  周波数として取れれば良いので、
                  AnalyserNode を使えばOK



13年2月23日土曜日
少し戻って・・・



13年2月23日土曜日
前回の資料より




13年2月23日土曜日
ここでようやく
               今回のキモ


13年2月23日土曜日
WebRTC +




13年2月23日土曜日
WebRTC +
              Web Audio API =




13年2月23日土曜日
WebRTC +
              Web Audio API =
              スーパーサイヤ人


13年2月23日土曜日
WebRTC +
              Web Audio API =
              スーパーサイヤ人
              (=ライブ音声入力)

13年2月23日土曜日
ドコとドコが
                     繋がっているの?
              •   先ほどの getUserMedia で出てきた
                  mediaStream オブジェクトを対象の
                  メソッドに渡して連携させる

              • video側は、
                  createObjectURL(stream) を使って
                  BlobURLを取得し、video.src として
                  利用していた


13年2月23日土曜日
ドコとドコが
                   繋がっているの?

              • audio側は、AudioContext オブジェ
                クトを用いる

              • audio周りの処理が、AudioContext
                オブジェクトのメソッドを介して行わ
                れる

              • なので、まず AudioContext を作る

              • var context = getAudioContext();
13年2月23日土曜日
ドコとドコが
                   繋がっているの?
              • video側の createObjectURL(stream)
               の、audio側に相当しているものは、
               context.createMediaStreamSource(s
               tream)

              • 意味はそのまんま、mediaStream を
               入力として作ります、と書いてある

              • 2つの仕様が連携することで、逆に
               videoよりもシンプルで分かりやすい

13年2月23日土曜日
ライブ音声入力の
              周波数ごとの値を
                取得できる
              ところまでの流れ


13年2月23日土曜日
取得した LocalMediaStream
               オブジェクトを、値として処理
                 できるところまで (1)
         var context = getAudioContext();
         var source = context.createMediaStreamSource(stream);
         var audioAnalyser = context.createAnalyser();
         var audioAnalyzedData =
         new Uint8Array(audioAnalyser.frequencyBinCount);
         source.connect(audioAnalyser);
         audioAnalyser.getByteFrequencyData(audioAnalyzedData);



              • AudioContext を作る



13年2月23日土曜日
取得した LocalMediaStream
               オブジェクトを、値として処理
                 できるところまで (2)
         var context = getAudioContext();
         var source = context.createMediaStreamSource(stream);
         var audioAnalyser = context.createAnalyser();
         var audioAnalyzedData =
         new Uint8Array(audioAnalyser.frequencyBinCount);
         source.connect(audioAnalyser);
         audioAnalyser.getByteFrequencyData(audioAnalyzedData);



              • AudioContext に対して、
               createMediaStreamSource メソッド
               を呼ぶと、
               MediaStreamAudioSourceNode とい
               う 出力用のノードが取得できる

13年2月23日土曜日
取得した LocalMediaStream
               オブジェクトを、値として処理
                 できるところまで (3)
         var context = getAudioContext();
         var source = context.createMediaStreamSource(stream);
         var audioAnalyser = context.createAnalyser();
         var audioAnalyzedData =
         new Uint8Array(audioAnalyser.frequencyBinCount);
         source.connect(audioAnalyser);
         audioAnalyser.getByteFrequencyData(audioAnalyzedData);



              • 先ほどとは別に、
               AudioContext に対して
               createAnalyser メソッドを呼ぶと、
               AnalyserNode という、音データの解
               析ができるノードが取得できる

13年2月23日土曜日
取得した LocalMediaStream
               オブジェクトを、値として処理
                 できるところまで (4)
         var context = getAudioContext();
         var source = context.createMediaStreamSource(stream);
         var audioAnalyser = context.createAnalyser();
         var audioAnalyzedData =
         new Uint8Array(audioAnalyser.frequencyBinCount);
         source.connect(audioAnalyser);
         audioAnalyser.getByteFrequencyData(audioAnalyzedData);




              • (今すぐ必要ではないけど、)
               あらかじめ周波数分のUint8Array型の
               型付き配列(Typed Array)を
               作っておく

              • ただの配列でも良いけど、速度の問題
13年2月23日土曜日
取得した LocalMediaStream
               オブジェクトを、値として処理
                 できるところまで (5)
         var context = getAudioContext();
         var source = context.createMediaStreamSource(stream);
         var audioAnalyser = context.createAnalyser();
         var audioAnalyzedData =
         new Uint8Array(audioAnalyser.frequencyBinCount);
         source.connect(audioAnalyser);
         audioAnalyser.getByteFrequencyData(audioAnalyzedData);




              • source は出力オンリーなので、
               audioAnalyserノードの入力につなぐ

              • mediaStream オブジェクトから、
               audioAnalyserノードの入力までが
               つながった

13年2月23日土曜日
取得した LocalMediaStream
               オブジェクトを、値として処理
                 できるところまで (6)
         var context = getAudioContext();
         var source = context.createMediaStreamSource(stream);
         var audioAnalyser = context.createAnalyser();
         var audioAnalyzedData =
         new Uint8Array(audioAnalyser.frequencyBinCount);
         source.connect(audioAnalyser);
         audioAnalyser.getByteFrequencyData(audioAnalyzedData);




              • audioAnalyserノードの
               getByteFrequencyData メソッドを
               任意のタイミングで呼ぶことで、
               型付き配列 audioAnalyzedData に
               毎回データが入る

13年2月23日土曜日
取得した LocalMediaStream
               オブジェクトを、値として処理
                 できるところまで (7)

              • 後はただの配列に対する処理
              • 今回のコンテンツでは、簡素化するた
               めに周波数ごとの平均値を取り、それ
               を時間軸に対しても平均化
               (一瞬だけ音がでかくなることがある
               のを反応しないようにならす)

              • 平均化された数値をしきい値と比較
13年2月23日土曜日
Web Audio API
              •   まだまだ機能は豊富にあるけど、
                  きりがないので一旦この辺で・・・

              •   AnalyserNode だけでも、
                  色々応用考えられそう

              •   例:音声入力だけで操作するゲーム

              • 例:絶対音感を再現するとか
13年2月23日土曜日
おまけ

              • Q. Firefoxではライブ音声入力できな
               いの?

              • A. まだAudioContext のメソッドが
               足りないっぽいです




13年2月23日土曜日
おまけ
         • context.create
              MediaStreamS
              ource がないで
              すね・・・

         • これがないと、
              ライブ音声入力
              をつなぐことが
              出来ません


13年2月23日土曜日
使用した主なAPIなど

              •WebRTC (getUserMedia)

              • Web Audio API
              • Canvas




13年2月23日土曜日
Canvas

              •   前回もちょっと使ったけど、今回は
                  よりCanvasに向いている表現にトライ

              •   気が溜まっていく表現は、下から上に
                  放射線上に変化していってほしい

              •   (ここから先はおまけです)



13年2月23日土曜日
Canvas

              • 先行して検証用コンテンツを
                  作ってみた

              •   radical arrow
                  http://jsdo.it/pypupypa/radical-arrow




13年2月23日土曜日
Canvas




13年2月23日土曜日
Canvas における
                   save(), restore()
              • 自分も最初に Canvas を触ったころ、
                  勘違いして理解できなかったところ

              • context.save() は、Canvasのピクセ
                  ル情報を保持するのではなく、
                  contextを保持する

              •   ここでいうcontextの保持とは、
                  Canvasの回転、変形具合や色など


13年2月23日土曜日
Canvas における
                   save(), restore()

              •   実はこの矢印の座標計算、x軸を
                  プラスにすることだけやっている

              •   回転角度から、sin, cosを使って
                  x, yがいくつで、次の移動が・・・
                  みたいなことはやってない



13年2月23日土曜日
Canvas における
                     save(), restore()
               context.save();
               ...
               context.translate(canvasWidth / 2, canvasHeight / 2);
               context.rotate(rad);
               context.translate(-canvasWidth / 2, -canvasHeight / 2);
               context.drawImage(image, x, y);
               ...
               context.restore();




         •    まず context.save() で 今のcontext
              を保存しておく(あとで戻すため)




13年2月23日土曜日
Canvas における
              save(), restore()




13年2月23日土曜日
Canvas における
                     save(), restore()
               context.save();
               ...
               context.translate(canvasWidth / 2, canvasHeight / 2);
               context.rotate(rad);
               context.translate(-canvasWidth / 2, -canvasHeight / 2);
               context.drawImage(image, x, y);
               ...
               context.restore();




         •    context に対して様々な処理をして
              drawImage で矢印を描画する




13年2月23日土曜日
Canvas における
              save(), restore()




13年2月23日土曜日
Canvas における
                     save(), restore()
               context.save();
               ...
               context.translate(canvasWidth / 2, canvasHeight / 2);
               context.rotate(rad);
               context.translate(-canvasWidth / 2, -canvasHeight / 2);
               context.drawImage(image, x, y);
               ...
               context.restore();




         •    context.restore() を呼ぶと、context
              に対して回転や移動などの処理をする前
              の状態に戻る

         • 元通りの座標に戻るので、オブジェクト
              ごとに処理が固定化できる
13年2月23日土曜日
Canvas における
              save(), restore()




13年2月23日土曜日
Canvas その他

              •   一定フレームごとの描画処理で、
                  前に描いたものに対して、半透明の背
                  景色で塗りつぶすと、残像っぽくなる

              • これだけたくさんのオブジェクトを
                  DOM要素でやったらたぶんつらい
                  (つらそうなのでやってない)



13年2月23日土曜日
エフェクトも
               それなりに


13年2月23日土曜日
13年2月23日土曜日
13年2月23日土曜日
13年2月23日土曜日
すげーそれっぽい!



13年2月23日土曜日
エンジニアでも
              これくらいまでなら
               誰でもできるはず


13年2月23日土曜日
今日話す内容

              1. 作ってきたコンテンツの概要
              2. デモ
              3. WebRTC, Web Audio API などの話
              4. まとめ



13年2月23日土曜日
リアルタイムWeb!


              • リアルタイムに色々できるように
               なってきた、素敵な時代

              • ブラウザの進化すごい


13年2月23日土曜日
ライブ音声入力


              • 声というユーザーインターフェース
              • Web Audio API は、
               いじりがいがありそう




13年2月23日土曜日
くだらないことに
                  全力投球するの楽しい

              •   元ネタは、茶化すわけではなくて
                  本当にリスペクトしてる

              •   あそこまで熱くなれるものを、
                  なんとかして他の人にも体験させられ
                  ないだろうか?

              • 体験の共有

13年2月23日土曜日
これからも
         くだらないことに
        全力投球でいきます!


13年2月23日土曜日
ありがとう
              ございました!


13年2月23日土曜日

More Related Content

What's hot

エンジニアも知っておきたいAI倫理のはなし
エンジニアも知っておきたいAI倫理のはなしエンジニアも知っておきたいAI倫理のはなし
エンジニアも知っておきたいAI倫理のはなし
Yasunori Nihei
 
AWSではじめるMLOps
AWSではじめるMLOpsAWSではじめるMLOps
AWSではじめるMLOps
MariOhbuchi
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
 
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことアプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なこと
Takao Sumitomo
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
Mitsutoshi Kiuchi
 
PFD(Process Flow Diagram)の書き方紹介
PFD(Process Flow Diagram)の書き方紹介PFD(Process Flow Diagram)の書き方紹介
PFD(Process Flow Diagram)の書き方紹介
Noriyuki Mizuno
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築
Yoshitaka HARA
 
とりあえずいい感じになるPower Pointテンプレート「Azusa Colors 改」を作った
とりあえずいい感じになるPower Pointテンプレート「Azusa Colors 改」を作ったとりあえずいい感じになるPower Pointテンプレート「Azusa Colors 改」を作った
とりあえずいい感じになるPower Pointテンプレート「Azusa Colors 改」を作った
幹弘 松山
 
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会Takayuki Kyowa
 
ノンプログラミングで始める AR 開発入門
ノンプログラミングで始める AR 開発入門ノンプログラミングで始める AR 開発入門
ノンプログラミングで始める AR 開発入門
Takashi Yoshinaga
 
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
Hideki Takase
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おう
DevTakas
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
 
論文に関する基礎知識2016
 論文に関する基礎知識2016 論文に関する基礎知識2016
論文に関する基礎知識2016
Mai Otsuki
 
これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~
これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~
これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~
MicroAd, Inc.(Engineer)
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
Tsutomu Sogitani
 
Power Automateで電子帳簿保存法に対応してみた。
Power Automateで電子帳簿保存法に対応してみた。Power Automateで電子帳簿保存法に対応してみた。
Power Automateで電子帳簿保存法に対応してみた。
Tatsuya Kobayashi
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話Tokoroten Nakayama
 

What's hot (20)

エンジニアも知っておきたいAI倫理のはなし
エンジニアも知っておきたいAI倫理のはなしエンジニアも知っておきたいAI倫理のはなし
エンジニアも知っておきたいAI倫理のはなし
 
AWSではじめるMLOps
AWSではじめるMLOpsAWSではじめるMLOps
AWSではじめるMLOps
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことアプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なこと
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
 
PFD(Process Flow Diagram)の書き方紹介
PFD(Process Flow Diagram)の書き方紹介PFD(Process Flow Diagram)の書き方紹介
PFD(Process Flow Diagram)の書き方紹介
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築
 
とりあえずいい感じになるPower Pointテンプレート「Azusa Colors 改」を作った
とりあえずいい感じになるPower Pointテンプレート「Azusa Colors 改」を作ったとりあえずいい感じになるPower Pointテンプレート「Azusa Colors 改」を作った
とりあえずいい感じになるPower Pointテンプレート「Azusa Colors 改」を作った
 
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
 
ノンプログラミングで始める AR 開発入門
ノンプログラミングで始める AR 開発入門ノンプログラミングで始める AR 開発入門
ノンプログラミングで始める AR 開発入門
 
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おう
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
論文に関する基礎知識2016
 論文に関する基礎知識2016 論文に関する基礎知識2016
論文に関する基礎知識2016
 
これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~
これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~
これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
 
Power Automateで電子帳簿保存法に対応してみた。
Power Automateで電子帳簿保存法に対応してみた。Power Automateで電子帳簿保存法に対応してみた。
Power Automateで電子帳簿保存法に対応してみた。
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
 

Viewers also liked

WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!
mganeko
 
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
Kensaku Komatsu
 
H.264で相互接続 - WebRTC Meetup Tokyo #10
H.264で相互接続 - WebRTC Meetup Tokyo #10H.264で相互接続 - WebRTC Meetup Tokyo #10
H.264で相互接続 - WebRTC Meetup Tokyo #10
goforbroke
 
あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)
Fumiya Sakai
 
SFUの話
SFUの話SFUの話
SFUの話
tnoho
 
第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...
第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...
第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...
Akihiko Kodama
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
mganeko
 
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
You_Kinjoh
 
WebRTC on Edge
WebRTC on EdgeWebRTC on Edge
WebRTC on Edge
Saki Homma
 
WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発
Yusuke Naka
 
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
mganeko
 
色々なデバイスの映像を使ったWebブラウザでのWebRTC映像中継(GotAPIからのWebRTC利用)
色々なデバイスの映像を使ったWebブラウザでのWebRTC映像中継(GotAPIからのWebRTC利用) 色々なデバイスの映像を使ったWebブラウザでのWebRTC映像中継(GotAPIからのWebRTC利用)
色々なデバイスの映像を使ったWebブラウザでのWebRTC映像中継(GotAPIからのWebRTC利用)
Device WebAPI Consortium
 
Web of Thingsの現状とWebRTC活用の可能性
Web of Thingsの現状とWebRTC活用の可能性Web of Thingsの現状とWebRTC活用の可能性
Web of Thingsの現状とWebRTC活用の可能性
Kensaku Komatsu
 

Viewers also liked (13)

WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!
 
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
 
H.264で相互接続 - WebRTC Meetup Tokyo #10
H.264で相互接続 - WebRTC Meetup Tokyo #10H.264で相互接続 - WebRTC Meetup Tokyo #10
H.264で相互接続 - WebRTC Meetup Tokyo #10
 
あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)
 
SFUの話
SFUの話SFUの話
SFUの話
 
第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...
第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...
第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT:WebRTCとWebGLで作...
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版
 
WebRTC on Edge
WebRTC on EdgeWebRTC on Edge
WebRTC on Edge
 
WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発
 
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
 
色々なデバイスの映像を使ったWebブラウザでのWebRTC映像中継(GotAPIからのWebRTC利用)
色々なデバイスの映像を使ったWebブラウザでのWebRTC映像中継(GotAPIからのWebRTC利用) 色々なデバイスの映像を使ったWebブラウザでのWebRTC映像中継(GotAPIからのWebRTC利用)
色々なデバイスの映像を使ったWebブラウザでのWebRTC映像中継(GotAPIからのWebRTC利用)
 
Web of Thingsの現状とWebRTC活用の可能性
Web of Thingsの現状とWebRTC活用の可能性Web of Thingsの現状とWebRTC活用の可能性
Web of Thingsの現状とWebRTC活用の可能性
 

Similar to WebRTC + Web Audio API = スーパーサイヤ人

GREE github-enterprise
GREE github-enterpriseGREE github-enterprise
GREE github-enterprise
Koichiro Ohba
 
Webアプリのマークアップ、どうすればいいの?
Webアプリのマークアップ、どうすればいいの?Webアプリのマークアップ、どうすればいいの?
Webアプリのマークアップ、どうすればいいの?
girigiribauer
 
CocosBuilderの紹介
CocosBuilderの紹介CocosBuilderの紹介
CocosBuilderの紹介
Masahiro Murakami
 
マルチデバイス対応のコーディング・マークアップのポイント
マルチデバイス対応のコーディング・マークアップのポイントマルチデバイス対応のコーディング・マークアップのポイント
マルチデバイス対応のコーディング・マークアップのポイント
Masayuki Maekawa
 
10分で分かるr言語入門ver2.2 13 0223
10分で分かるr言語入門ver2.2 13 022310分で分かるr言語入門ver2.2 13 0223
10分で分かるr言語入門ver2.2 13 0223Nobuaki Oshiro
 
アクセス解析システムの裏側 (公開用)
アクセス解析システムの裏側 (公開用)アクセス解析システムの裏側 (公開用)
アクセス解析システムの裏側 (公開用)shunsuke Mikami
 
2012.02.28 IAMAS GeekLab #037 MyScripts
2012.02.28 IAMAS GeekLab #037 MyScripts2012.02.28 IAMAS GeekLab #037 MyScripts
2012.02.28 IAMAS GeekLab #037 MyScripts
玉津圭太 玉津圭太
 

Similar to WebRTC + Web Audio API = スーパーサイヤ人 (8)

GREE github-enterprise
GREE github-enterpriseGREE github-enterprise
GREE github-enterprise
 
Webアプリのマークアップ、どうすればいいの?
Webアプリのマークアップ、どうすればいいの?Webアプリのマークアップ、どうすればいいの?
Webアプリのマークアップ、どうすればいいの?
 
Kddi mugen lab
Kddi mugen labKddi mugen lab
Kddi mugen lab
 
CocosBuilderの紹介
CocosBuilderの紹介CocosBuilderの紹介
CocosBuilderの紹介
 
マルチデバイス対応のコーディング・マークアップのポイント
マルチデバイス対応のコーディング・マークアップのポイントマルチデバイス対応のコーディング・マークアップのポイント
マルチデバイス対応のコーディング・マークアップのポイント
 
10分で分かるr言語入門ver2.2 13 0223
10分で分かるr言語入門ver2.2 13 022310分で分かるr言語入門ver2.2 13 0223
10分で分かるr言語入門ver2.2 13 0223
 
アクセス解析システムの裏側 (公開用)
アクセス解析システムの裏側 (公開用)アクセス解析システムの裏側 (公開用)
アクセス解析システムの裏側 (公開用)
 
2012.02.28 IAMAS GeekLab #037 MyScripts
2012.02.28 IAMAS GeekLab #037 MyScripts2012.02.28 IAMAS GeekLab #037 MyScripts
2012.02.28 IAMAS GeekLab #037 MyScripts
 

More from girigiribauer

黒い画面超入門 - tmux を使ってみよう
黒い画面超入門 - tmux を使ってみよう黒い画面超入門 - tmux を使ってみよう
黒い画面超入門 - tmux を使ってみよう
girigiribauer
 
JSHint を自分好みにする話
JSHint を自分好みにする話JSHint を自分好みにする話
JSHint を自分好みにする話
girigiribauer
 
CSS の Flexible Box Layout がヤバい
CSS の Flexible Box Layout がヤバいCSS の Flexible Box Layout がヤバい
CSS の Flexible Box Layout がヤバい
girigiribauer
 
フロントエンドのツール Yeoman を勘違いしていた
フロントエンドのツール Yeoman を勘違いしていたフロントエンドのツール Yeoman を勘違いしていた
フロントエンドのツール Yeoman を勘違いしていた
girigiribauer
 
Raphael.jsを使ってSVGをモーフィングさせてみた失敗の記録
Raphael.jsを使ってSVGをモーフィングさせてみた失敗の記録Raphael.jsを使ってSVGをモーフィングさせてみた失敗の記録
Raphael.jsを使ってSVGをモーフィングさせてみた失敗の記録
girigiribauer
 
WebRTCでドラゴンボールごっこ
WebRTCでドラゴンボールごっこWebRTCでドラゴンボールごっこ
WebRTCでドラゴンボールごっこ
girigiribauer
 
Webサイトのようには作れない!Webアプリ設計の考え方
Webサイトのようには作れない!Webアプリ設計の考え方Webサイトのようには作れない!Webアプリ設計の考え方
Webサイトのようには作れない!Webアプリ設計の考え方girigiribauer
 
a-blog cms初心者が テンプレート作るまで
a-blog cms初心者が テンプレート作るまでa-blog cms初心者が テンプレート作るまで
a-blog cms初心者が テンプレート作るまでgirigiribauer
 

More from girigiribauer (8)

黒い画面超入門 - tmux を使ってみよう
黒い画面超入門 - tmux を使ってみよう黒い画面超入門 - tmux を使ってみよう
黒い画面超入門 - tmux を使ってみよう
 
JSHint を自分好みにする話
JSHint を自分好みにする話JSHint を自分好みにする話
JSHint を自分好みにする話
 
CSS の Flexible Box Layout がヤバい
CSS の Flexible Box Layout がヤバいCSS の Flexible Box Layout がヤバい
CSS の Flexible Box Layout がヤバい
 
フロントエンドのツール Yeoman を勘違いしていた
フロントエンドのツール Yeoman を勘違いしていたフロントエンドのツール Yeoman を勘違いしていた
フロントエンドのツール Yeoman を勘違いしていた
 
Raphael.jsを使ってSVGをモーフィングさせてみた失敗の記録
Raphael.jsを使ってSVGをモーフィングさせてみた失敗の記録Raphael.jsを使ってSVGをモーフィングさせてみた失敗の記録
Raphael.jsを使ってSVGをモーフィングさせてみた失敗の記録
 
WebRTCでドラゴンボールごっこ
WebRTCでドラゴンボールごっこWebRTCでドラゴンボールごっこ
WebRTCでドラゴンボールごっこ
 
Webサイトのようには作れない!Webアプリ設計の考え方
Webサイトのようには作れない!Webアプリ設計の考え方Webサイトのようには作れない!Webアプリ設計の考え方
Webサイトのようには作れない!Webアプリ設計の考え方
 
a-blog cms初心者が テンプレート作るまで
a-blog cms初心者が テンプレート作るまでa-blog cms初心者が テンプレート作るまで
a-blog cms初心者が テンプレート作るまで
 

Recently uploaded

論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 

Recently uploaded (16)

論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 

WebRTC + Web Audio API = スーパーサイヤ人

  • 1. WebRTC + Web Audio API = スーパーサイヤ人 2013/02/23 #daiNagoyaJS vol.5 13年2月23日土曜日
  • 2. いつもぎりぎり、 @girigiribauerです 13年2月23日土曜日
  • 3. 本日のネタは、 大なごやJS Vol.3で 話したネタの 完全版です 13年2月23日土曜日
  • 5. 今日話す内容 1. 作ってきたコンテンツの概要 2. デモ 3. WebRTC, Web Audio API などの話 4. まとめ 13年2月23日土曜日
  • 7. 今日話す内容 1. 作ってきたコンテンツの概要 2. デモ 3. WebRTC, Web Audio API などの話 4. まとめ 13年2月23日土曜日
  • 9. WebRTC + Web Audio API = 13年2月23日土曜日
  • 10. WebRTC + Web Audio API = スーパーサイヤ人 13年2月23日土曜日
  • 11. ドラゴンボールとは • みんな大好きドラゴンボール • サイヤ人は、金色の髪のスーパーサイ ヤ人に変身する • 変身すると 強くなるのは 男のロマン 映画あるよ! http://www.dragonball2013.com/ 13年2月23日土曜日
  • 12. スーパーサイヤ人に なってみたかった 13年2月23日土曜日
  • 14. i'm a super saiyan http://www.youtube.com/watch?v=lIv88cC86r0 13年2月23日土曜日
  • 15. i'm a super saiyan http://www.youtube.com/watch?v=lIv88cC86r0 13年2月23日土曜日
  • 16. i'm a super saiyan http://www.youtube.com/watch?v=lIv88cC86r0 13年2月23日土曜日
  • 17. i'm a super saiyan http://www.youtube.com/watch?v=lIv88cC86r0 13年2月23日土曜日
  • 18. i'm a super saiyan http://www.youtube.com/watch?v=lIv88cC86r0 13年2月23日土曜日
  • 19. i'm a super saiyan http://www.youtube.com/watch?v=lIv88cC86r0 13年2月23日土曜日
  • 20. i'm a super saiyan http://www.youtube.com/watch?v=lIv88cC86r0 13年2月23日土曜日
  • 21. i'm a super saiyan http://www.youtube.com/watch?v=lIv88cC86r0 13年2月23日土曜日
  • 22. respect! • i'm a super saiyan http://www.youtube.com/watch?v=lIv88cC86r0 13年2月23日土曜日
  • 23. 全力投球の 中二病は coolだと思う 13年2月23日土曜日
  • 25. リベンジネタ • 実は大なごやJS Vol.3 でやったネタ (2012/07/21) • 前回は、ホントに軽く作ってみた 13年2月23日土曜日
  • 26. リベンジネタ • あれ、音声がとれない → まだ未実装 • (本番当日) 「ク、クリックで・・・ 代用しました・・・」 13年2月23日土曜日
  • 30. ユーザー体験と しては 0点 13年2月23日土曜日
  • 31. それも 今や昔の話・・・ 13年2月23日土曜日
  • 32. 君もなれる! スーパーサイヤ人に! 13年2月23日土曜日
  • 34. 今日話す内容 1. 作ってきたコンテンツの概要 2. デモ 3. WebRTC, Web Audio API などの話 4. まとめ 13年2月23日土曜日
  • 35. デモ • なれる!スーパーサイヤ人! http://girigiribauer.com/dragonball-super-saiyan/ 13年2月23日土曜日
  • 38. 今日話す内容 1. 作ってきたコンテンツの概要 2. デモ 3. WebRTC, Web Audio API などの話 4. まとめ 13年2月23日土曜日
  • 39. 使用した主なAPIなど •WebRTC (getUserMedia) • Web Audio API • Canvas 13年2月23日土曜日
  • 40. このあたりの話を ピンポイントで 抜粋して紹介 13年2月23日土曜日
  • 41. 使用した主なAPIなど •WebRTC (getUserMedia) • Web Audio API • Canvas 13年2月23日土曜日
  • 42. WebRTC (getUserMedia) • RTCは、Real Time Communication の略 • その中の getUserMedia は、 ローカルにあるカメラ、マイクに アクセスできる 13年2月23日土曜日
  • 43. 対応状況 (※2013/02/23時点) • http://caniuse.com/stream 13年2月23日土曜日
  • 44. 対応状況 (※2013/02/23時点) • Chrome, Operaに続いて Firefoxも getUserMedia が使える! • Firefoxはabout:configのフラグ付き • IEは、そもそもCU-RTC-Webという 別仕様を推進してる (CU: Customizable, Ubiquitous) 13年2月23日土曜日
  • 45. getUserMedia の 基本的な使い方 • navigatorオブジェクトにある getUserMedia メソッド • 引数を3つ取る • 1つ目は、デバイスの種別指定のオブ ジェクト(テキストではない) 13年2月23日土曜日
  • 46. getUserMedia の 基本的な使い方 • 2つ目は、ローカルデバイスに アクセスが出来たときに生成される、 mediaStream オブジェクトを 引数にもつ、コールバック関数 • 3つ目は、上記失敗したときの コールバック関数 13年2月23日土曜日
  • 47. getUserMedia の 基本的な使い方 • そこまで複雑じゃない、数行レベル • クロスブラウザな書き方は、 navigator.getUserMediaに対して 上書きできないので、 ちょっと工夫する 13年2月23日土曜日
  • 48. getUserMedia の 基本的な使い方 var getUserMedia = function(t, onsuccess, onerror) { if (navigator.getUserMedia) { return navigator.getUserMedia(t, onsuccess, onerror); } else if (navigator.webkitGetUserMedia) { return navigator.webkitGetUserMedia(t, onsuccess, onerror); } else if (navigator.mozGetUserMedia) { return navigator.mozGetUserMedia(t, onsuccess, onerror); } else if (navigator.msGetUserMedia) { return navigator.msGetUserMedia(t, onsuccess, onerror); } else { throw new Error('No getUserMedia implementation found.'); } }; • navigator.getUserMediaごと返す • あとはfunctionでラッピングするなり 13年2月23日土曜日
  • 49. getUserMedia の 基本的な使い方 • デバイスへの接続がうまくいった後、 とりあえず表示させるまでの話 (前回の資料をさらっと再紹介) 13年2月23日土曜日
  • 50. 取得した LocalMediaStream オブジ ェクトをきちんと表示するところまで (1) • canvas要素を作る、もしくは予め作っ た要素を参照する • var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); 13年2月23日土曜日
  • 51. 取得した LocalMediaStream オブジ ェクトをきちんと表示するところまで (2) • createObjectURL にさっきの LocalMediaStream オブジェクトを ぶちこんで、BlobURL(リソースを参 照してる)を取得する • var videoUrl = createObjectURL(stream); 13年2月23日土曜日
  • 52. 取得した LocalMediaStream オブジ ェクトをきちんと表示するところまで (2) • デバイスをBlobURLとして受け取るこ とで、同様のインターフェースで扱え る(URL参照 ≒ デバイス参照) • Blobは Binary Large OBject の略、 FileAPI 周りでよく使われてる 13年2月23日土曜日
  • 53. 取得した LocalMediaStream オブジ ェクトをきちんと表示するところまで (3) • video タグの src 属性に、 さっきの BlobURL をつっこむ • var video = document.getElementById('video'); video.src = videoUrl; video.autoplay = true; • ※autoplay 属性がないと最初の1コマ だけで止まっちゃうのでつける • 単に表示のみなら、ここまででOK 13年2月23日土曜日
  • 54. 取得した LocalMediaStream オブジ ェクトをきちんと表示するところまで (4) • あとは連続して canvas に video 要 素を反映してやるだけ • var render = function() { context.drawImage(video, 0, 0, w, h); requestAnimationFrame(render); }; requestAnimationFrame(render); 13年2月23日土曜日
  • 55. video は分かった では audio は? 13年2月23日土曜日
  • 56. その前に、 Web Audio API を考える必要がある 13年2月23日土曜日
  • 57. 使用した主なAPIなど •WebRTC (getUserMedia) • Web Audio API • Canvas 13年2月23日土曜日
  • 58. Web Audio API • 文字通り、Web の Audio の API • ノードというオブジェクト同士を つなぎ合わせることで制御する • 中にはAnalyserノード、数値として 解析できちゃうものもある • 仕様が幅広くて、まだまだ全容把握で きてない 13年2月23日土曜日
  • 59. 対応状況 (※2013/02/23時点) • http://caniuse.com/audio-api 13年2月23日土曜日
  • 60. 対応状況 (※2013/02/23時点) • Chrome, Safari, iOS Safari が使える • つい数日前に、Firefox Nightly にて Web Audio API がフラグ付きで導入 • Firefox21 か 22 あたりで Web Audio API が正式実装される? 13年2月23日土曜日
  • 61. 対応状況 (※2013/02/23時点) • Firefox では、about:config から media.webaudio.enabled を true に • ただし、Firefoxはまだ完全じゃないと ころもある(詳しくは後述) 13年2月23日土曜日
  • 62. Web Audio API で 今回やりたいこと • 今回やりたいのは、 入力から数値として取れるところまで • 出力側は必ずしも必要ではない • ライブ入力の音声を、リアルタイムに 周波数として取れれば良いので、 AnalyserNode を使えばOK 13年2月23日土曜日
  • 65. ここでようやく 今回のキモ 13年2月23日土曜日
  • 67. WebRTC + Web Audio API = 13年2月23日土曜日
  • 68. WebRTC + Web Audio API = スーパーサイヤ人 13年2月23日土曜日
  • 69. WebRTC + Web Audio API = スーパーサイヤ人 (=ライブ音声入力) 13年2月23日土曜日
  • 70. ドコとドコが 繋がっているの? • 先ほどの getUserMedia で出てきた mediaStream オブジェクトを対象の メソッドに渡して連携させる • video側は、 createObjectURL(stream) を使って BlobURLを取得し、video.src として 利用していた 13年2月23日土曜日
  • 71. ドコとドコが 繋がっているの? • audio側は、AudioContext オブジェ クトを用いる • audio周りの処理が、AudioContext オブジェクトのメソッドを介して行わ れる • なので、まず AudioContext を作る • var context = getAudioContext(); 13年2月23日土曜日
  • 72. ドコとドコが 繋がっているの? • video側の createObjectURL(stream) の、audio側に相当しているものは、 context.createMediaStreamSource(s tream) • 意味はそのまんま、mediaStream を 入力として作ります、と書いてある • 2つの仕様が連携することで、逆に videoよりもシンプルで分かりやすい 13年2月23日土曜日
  • 73. ライブ音声入力の 周波数ごとの値を 取得できる ところまでの流れ 13年2月23日土曜日
  • 74. 取得した LocalMediaStream オブジェクトを、値として処理 できるところまで (1) var context = getAudioContext(); var source = context.createMediaStreamSource(stream); var audioAnalyser = context.createAnalyser(); var audioAnalyzedData = new Uint8Array(audioAnalyser.frequencyBinCount); source.connect(audioAnalyser); audioAnalyser.getByteFrequencyData(audioAnalyzedData); • AudioContext を作る 13年2月23日土曜日
  • 75. 取得した LocalMediaStream オブジェクトを、値として処理 できるところまで (2) var context = getAudioContext(); var source = context.createMediaStreamSource(stream); var audioAnalyser = context.createAnalyser(); var audioAnalyzedData = new Uint8Array(audioAnalyser.frequencyBinCount); source.connect(audioAnalyser); audioAnalyser.getByteFrequencyData(audioAnalyzedData); • AudioContext に対して、 createMediaStreamSource メソッド を呼ぶと、 MediaStreamAudioSourceNode とい う 出力用のノードが取得できる 13年2月23日土曜日
  • 76. 取得した LocalMediaStream オブジェクトを、値として処理 できるところまで (3) var context = getAudioContext(); var source = context.createMediaStreamSource(stream); var audioAnalyser = context.createAnalyser(); var audioAnalyzedData = new Uint8Array(audioAnalyser.frequencyBinCount); source.connect(audioAnalyser); audioAnalyser.getByteFrequencyData(audioAnalyzedData); • 先ほどとは別に、 AudioContext に対して createAnalyser メソッドを呼ぶと、 AnalyserNode という、音データの解 析ができるノードが取得できる 13年2月23日土曜日
  • 77. 取得した LocalMediaStream オブジェクトを、値として処理 できるところまで (4) var context = getAudioContext(); var source = context.createMediaStreamSource(stream); var audioAnalyser = context.createAnalyser(); var audioAnalyzedData = new Uint8Array(audioAnalyser.frequencyBinCount); source.connect(audioAnalyser); audioAnalyser.getByteFrequencyData(audioAnalyzedData); • (今すぐ必要ではないけど、) あらかじめ周波数分のUint8Array型の 型付き配列(Typed Array)を 作っておく • ただの配列でも良いけど、速度の問題 13年2月23日土曜日
  • 78. 取得した LocalMediaStream オブジェクトを、値として処理 できるところまで (5) var context = getAudioContext(); var source = context.createMediaStreamSource(stream); var audioAnalyser = context.createAnalyser(); var audioAnalyzedData = new Uint8Array(audioAnalyser.frequencyBinCount); source.connect(audioAnalyser); audioAnalyser.getByteFrequencyData(audioAnalyzedData); • source は出力オンリーなので、 audioAnalyserノードの入力につなぐ • mediaStream オブジェクトから、 audioAnalyserノードの入力までが つながった 13年2月23日土曜日
  • 79. 取得した LocalMediaStream オブジェクトを、値として処理 できるところまで (6) var context = getAudioContext(); var source = context.createMediaStreamSource(stream); var audioAnalyser = context.createAnalyser(); var audioAnalyzedData = new Uint8Array(audioAnalyser.frequencyBinCount); source.connect(audioAnalyser); audioAnalyser.getByteFrequencyData(audioAnalyzedData); • audioAnalyserノードの getByteFrequencyData メソッドを 任意のタイミングで呼ぶことで、 型付き配列 audioAnalyzedData に 毎回データが入る 13年2月23日土曜日
  • 80. 取得した LocalMediaStream オブジェクトを、値として処理 できるところまで (7) • 後はただの配列に対する処理 • 今回のコンテンツでは、簡素化するた めに周波数ごとの平均値を取り、それ を時間軸に対しても平均化 (一瞬だけ音がでかくなることがある のを反応しないようにならす) • 平均化された数値をしきい値と比較 13年2月23日土曜日
  • 81. Web Audio API • まだまだ機能は豊富にあるけど、 きりがないので一旦この辺で・・・ • AnalyserNode だけでも、 色々応用考えられそう • 例:音声入力だけで操作するゲーム • 例:絶対音感を再現するとか 13年2月23日土曜日
  • 82. おまけ • Q. Firefoxではライブ音声入力できな いの? • A. まだAudioContext のメソッドが 足りないっぽいです 13年2月23日土曜日
  • 83. おまけ • context.create MediaStreamS ource がないで すね・・・ • これがないと、 ライブ音声入力 をつなぐことが 出来ません 13年2月23日土曜日
  • 84. 使用した主なAPIなど •WebRTC (getUserMedia) • Web Audio API • Canvas 13年2月23日土曜日
  • 85. Canvas • 前回もちょっと使ったけど、今回は よりCanvasに向いている表現にトライ • 気が溜まっていく表現は、下から上に 放射線上に変化していってほしい • (ここから先はおまけです) 13年2月23日土曜日
  • 86. Canvas • 先行して検証用コンテンツを 作ってみた • radical arrow http://jsdo.it/pypupypa/radical-arrow 13年2月23日土曜日
  • 88. Canvas における save(), restore() • 自分も最初に Canvas を触ったころ、 勘違いして理解できなかったところ • context.save() は、Canvasのピクセ ル情報を保持するのではなく、 contextを保持する • ここでいうcontextの保持とは、 Canvasの回転、変形具合や色など 13年2月23日土曜日
  • 89. Canvas における save(), restore() • 実はこの矢印の座標計算、x軸を プラスにすることだけやっている • 回転角度から、sin, cosを使って x, yがいくつで、次の移動が・・・ みたいなことはやってない 13年2月23日土曜日
  • 90. Canvas における save(), restore() context.save(); ... context.translate(canvasWidth / 2, canvasHeight / 2); context.rotate(rad); context.translate(-canvasWidth / 2, -canvasHeight / 2); context.drawImage(image, x, y); ... context.restore(); • まず context.save() で 今のcontext を保存しておく(あとで戻すため) 13年2月23日土曜日
  • 91. Canvas における save(), restore() 13年2月23日土曜日
  • 92. Canvas における save(), restore() context.save(); ... context.translate(canvasWidth / 2, canvasHeight / 2); context.rotate(rad); context.translate(-canvasWidth / 2, -canvasHeight / 2); context.drawImage(image, x, y); ... context.restore(); • context に対して様々な処理をして drawImage で矢印を描画する 13年2月23日土曜日
  • 93. Canvas における save(), restore() 13年2月23日土曜日
  • 94. Canvas における save(), restore() context.save(); ... context.translate(canvasWidth / 2, canvasHeight / 2); context.rotate(rad); context.translate(-canvasWidth / 2, -canvasHeight / 2); context.drawImage(image, x, y); ... context.restore(); • context.restore() を呼ぶと、context に対して回転や移動などの処理をする前 の状態に戻る • 元通りの座標に戻るので、オブジェクト ごとに処理が固定化できる 13年2月23日土曜日
  • 95. Canvas における save(), restore() 13年2月23日土曜日
  • 96. Canvas その他 • 一定フレームごとの描画処理で、 前に描いたものに対して、半透明の背 景色で塗りつぶすと、残像っぽくなる • これだけたくさんのオブジェクトを DOM要素でやったらたぶんつらい (つらそうなのでやってない) 13年2月23日土曜日
  • 97. エフェクトも それなりに 13年2月23日土曜日
  • 102. エンジニアでも これくらいまでなら 誰でもできるはず 13年2月23日土曜日
  • 103. 今日話す内容 1. 作ってきたコンテンツの概要 2. デモ 3. WebRTC, Web Audio API などの話 4. まとめ 13年2月23日土曜日
  • 104. リアルタイムWeb! • リアルタイムに色々できるように なってきた、素敵な時代 • ブラウザの進化すごい 13年2月23日土曜日
  • 105. ライブ音声入力 • 声というユーザーインターフェース • Web Audio API は、 いじりがいがありそう 13年2月23日土曜日
  • 106. くだらないことに 全力投球するの楽しい • 元ネタは、茶化すわけではなくて 本当にリスペクトしてる • あそこまで熱くなれるものを、 なんとかして他の人にも体験させられ ないだろうか? • 体験の共有 13年2月23日土曜日
  • 107. これからも くだらないことに 全力投球でいきます! 13年2月23日土曜日
  • 108. ありがとう ございました! 13年2月23日土曜日