<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>MIDI &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/midi/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>Webの最先端では何が起こっているか、今Googleが取り組んでいることは？──Google I/O 2016セッションレポート【後編】</title>
		<link>/ryoyakawai/19461/</link>
		<pubDate>Wed, 15 Jun 2016 00:00:15 +0000</pubDate>
		<dc:creator><![CDATA[河合良哉]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[I/O 2016]]></category>
		<category><![CDATA[MIDI]]></category>

		<guid isPermaLink="false">/?p=19461</guid>
		<description><![CDATA[Google I/O 2016のセッション「What&#8217;s new for the web?」についてのレポート後編です。（前編はこちら） 前編では、既に導入済みの機能、API、またこれから導入される機能が怒涛...]]></description>
				<content:encoded><![CDATA[<p>Google I/O 2016のセッション「What&#8217;s new for the web?」についてのレポート後編です。（前編は<a href="https://html5experts.jp/ryoyakawai/19335" target="_blank" data-wpel-link="internal">こちら</a>）
前編では、既に導入済みの機能、API、またこれから導入される機能が怒涛のごとく紹介してきました。後編では、Web Platformをより先に進めるためにGoogleが取り組んでいること、そしてWeb BluetoothやPhysical Webについて解説していきます。</p>

<h2>Google loves the web</h2>

<p>ChromeチームWeb Platformをより先に進めるために、ここ1～2年取り組んでいるアプローチの紹介です。</p>

<p><img src="/wp-content/uploads/2016/06/GoogleLovetheWeb1.png" alt="GoogleLovetheWeb" width="640" height="356" class="aligncenter size-full wp-image-19479" srcset="/wp-content/uploads/2016/06/GoogleLovetheWeb1.png 640w, /wp-content/uploads/2016/06/GoogleLovetheWeb1-300x167.png 300w, /wp-content/uploads/2016/06/GoogleLovetheWeb1-207x115.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>まず、前提としてGoogleはWebが大好きです。Googleの同僚は皆、Webが大好きです。そしてChrome Teamには「Webをより先に進める」という重要なMissonがあります。ここで私がWebと言っているのはChrome Webということではなく、全てのWebのことを指していて、それら全てのWebが素晴らしくなってほしいと思っています。</p>

<p>よって、Interoperability（相互運用性）を保ちモダンブラウザの全てにShipされるまでが我々の使命です。なぜならInteroperabilityが保たれずShipしてしまったら、誰でも・いつでも・どこでも利用できるというWebの最も大きく重要な利点の1つが失われてしまうからです。Vender Prefixを廃止したのもそういった理由です。</p>

<p>Chromeにおいては、Web Platformをより先に進めるために4つのアプローチをを持ち取り組んでいます。</p>

<h4>Chromeチームが取り組んできたこと</h4>

<ul>
<li><b>複数のチャネルを持つ</b>（Stable, Dev, Canary、Beta）</li>
<li><b>実験的な機能にはExperimental flagを設けONにしないと動かなくしている</b>(chrome://flags のことでWeb Bluetoothもこの1つ)</li>
<li><b>Original Trials</b>：実装したAPIをそのままExperimental flagとして提供してしまうと、いつの間にかデファクトになってしまう可能性があります。APIの仕様・実装を吟味してからShipすることがよりよいWebを作るのには必要不可欠です。よって、Feedbackをすることに同意したDeveloperのみ利用を可能にすることで、利用するユーザー数を絞り、さらに期間を区切ることでデファクトすることを防ぎ、実験のIterationのスピードを上げることを目的としています。さらに多くのDeveloperが使い始めた場合は自動的に利用を停止する機能も入っています。</li>
<li><b>Incubation of substantial new feature</b>(<a href="https://html5experts.jp//wicg.io" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">wicg.io</a>)：Web Incubator Community GroupをW3Cでにて行っています。標準化のProposalの議論をライトウェイトに行うグループです。チャーター（W3Cで議論を進める場合には必ず作成します）を作ったりすることに全ての時間は費やさないものの、正しく管理されるし、Contributionも受け付けることが可能です。もし新しい機能を提案したい場合は是非このグループに提案してください。</li>
</ul>

<p><img src="/wp-content/uploads/2016/06/wicg.png" alt="wicg" width="640" height="355" class="aligncenter size-full wp-image-19467" srcset="/wp-content/uploads/2016/06/wicg.png 640w, /wp-content/uploads/2016/06/wicg-300x166.png 300w, /wp-content/uploads/2016/06/wicg-207x115.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>しかし、機能を追加するだけではWeb Platformを健康に保つことはできません。よって、機能の削除も行います。削除の理由には、他のAPIとの入替えや、実験的に作ったが上手くいかなかった、というものがあったりします。3つ前までで削除された機能のリストがこちら(<a href="https://html5experts.jp//goo.gl/5gq1Im" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">goo.gl/5gq1Im</a>)です。今後、requestAutoCompleteだったり、HTML5 App Cacheのような影響の大きな機能も削除しようとしています。まだ使われている機能、APIをいきなり削除しないというようなポリシーもありますので安心してください。</p>

<h4>これまでの成功の紹介</h4>

<p>それでは、ここ数年での成功を紹介します。私がここに立っている、ということは何のことだか分かる方も多いかも知れませんが、そうですWeb MIDIです。</p>

<p>MIDIは知ってる方もそうでない方もいると思います。仕様ができてから30年以上にもなる楽器のキーボード、シンセサイザー等、電子楽器同士、またはコンピュータとを接続する標準化されたプロトコルです。数年前Web Audioで遊んでいたときに「これを楽器のキーボードから操作したい」と思い立ったW3Cにて標準化を始め、Chromeでは去年Shipされました。</p>

<p>ChromeでのShip以降、多くの楽器メーカがユーザー体験を提供するプラットフォームとしてWebを使い始めました。Yamahaはrefaceという新しいシンセサイザーのラインナップに対してSoundmondoという音色のエディタ、ライブラリアンを提供するWeb MIDIを使ったサービスを展開しています。NovationのCircuit Groove BoxはWebに接続して新しいサンプルをダウンロードします。これらの作業においてソフトウェアを新たにインストール必要はないのです。</p>

<p>そして、間違いなくスゴイことはフランスのEDMアーティストであるMadeonがWeb Audioで作られたRemixBoardをWebサイトで公開したことです。ファンに向けられて作られたサイトで、彼のアルバムの中の音をRemixして遊ぶことができるのです。もちろんMIDIデバイスも接続してプレイすることができるようになっているのです。<br>
（デモ（パフォーマンス？）が始まります。実際の動画を御覧ください）</p>

<p><figure class="aligncenter">
<a href="https://youtu.be/bK6Ah68jEX8?t=28m25s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">
<img src="/wp-content/uploads/2016/06/chris_madeon.png" alt="chris_madeon" width="640" height="359" class="aligncenter size-full wp-image-19477" srcset="/wp-content/uploads/2016/06/chris_madeon.png 640w, /wp-content/uploads/2016/06/chris_madeon-300x168.png 300w, /wp-content/uploads/2016/06/chris_madeon-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a>
<figcaption>何が起きたかは<a href="https://youtu.be/bK6Ah68jEX8?t=28m25s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">ここ</a>または画像をクリックして動画を御覧ください！</figcaption>
</figure></p>

<p>デモアプリのURLはこちら<a href="https://html5experts.jp//www.madeon.fr/adventuremachine" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">www.madeon.fr/adventuremachine</a>です。</p>

<p>「これスゴイでしょ？！」と言いたいのですが、本質はそこではなくて「ハードウェアがブラウザにアクセスできる」ということが大きな可能性を生んだ、ということを伝えたいのです。ちょうど加速度センサから素晴らしいユーザー体験（UX）が生まれ、モバイル・デバイスが大きな可能性を持ったのと同じようにです。他にも接続できることで大きな可能性が生まれるデバイスはたくさんあると思います。我々は、そこにある可能性を積極的に解き放っていきたいと考えています。</p>

<p>（ここでChris氏からFrançois氏に交代）</p>

<h2>これから何が起こるのか</h2>

<h4>Web Bluetooth</h4>

<p>Bluetoothの名称の由来の説明から始まります。（詳しくはWikipediaの<a href="https://goo.gl/s7nIAG" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Bluetooth </a>「名称の由来」をどうぞ）
<img src="/wp-content/uploads/2016/06/bluetooth.png" alt="bluetooth" width="640" height="358" class="aligncenter size-full wp-image-19486" srcset="/wp-content/uploads/2016/06/bluetooth.png 640w, /wp-content/uploads/2016/06/bluetooth-300x168.png 300w, /wp-content/uploads/2016/06/bluetooth-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>Bluetoothはいろいろなバージョンで20年成長してきた技術で、最新はBluetooth Low Energy（BLE）が導入されたVersion 4でリリースされてから6年経過しています。Wi-Fi、Ethernetのスピードは継続的に上がっていますが、Bluetoothはちょっと様子が違っています。</p>

<p><img src="/wp-content/uploads/2016/06/blespeed.png" alt="blespeed" width="640" height="358" class="aligncenter size-full wp-image-19488" srcset="/wp-content/uploads/2016/06/blespeed.png 640w, /wp-content/uploads/2016/06/blespeed-300x168.png 300w, /wp-content/uploads/2016/06/blespeed-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>なぜなら、今まで接続されていなかった多くのデバイスに搭載できるようにバッテリの消費量を最小限にできるようにデザインされているからです。例えば小型のデバイスが使うバッテリは、通常CR2032です。（2032の20は直径、32は厚さを表すそうです！）なので、転送速度はとっても遅いのです。ですが、BLEはそもそも転送速度が遅くても大丈夫なデバイスをターゲットにしているので問題はありません。</p>

<p>それでは、デモをしてみます。デモはPlaybulb Candleという電球のOn/Off、色をBluetooth通信にて変更できるデバイスをWebアプリから操作します。（映像には全体が映っていませんでしたが、会場ではこんな感じでデモが行われていました）</p>

<p><img src="/wp-content/uploads/2016/06/playbulbcandle.jpg" alt="playbulbcandle" width="640" height="426" class="aligncenter size-full wp-image-19491" srcset="/wp-content/uploads/2016/06/playbulbcandle.jpg 640w, /wp-content/uploads/2016/06/playbulbcandle-300x200.jpg 300w, /wp-content/uploads/2016/06/playbulbcandle-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>Bluetooth SIG(Bluetoothの規格の策定、技術利用に対する認証を行う団体)は、これから先2年で96%の電話、タブレットにBLEが搭載されると予想している。そこからも、いろいろな場所でBLEが存在するであろうことがお分かりになると思います。</p>

<p>Web BluetoothのAPIを説明する前に、一度BLEの動作を復習してみます。Bletoothには、以下の2つの機能があります。</p>

<ul>
<li><b>Central</b>：近隣のデバイスを探索する（電話、ラップトップPCの等）</li>
<li><b>Peripheral</b>：周囲に向けて継続的に自らの情報を格納したアドバタイジング・パケットをBroadcastする。（心拍センサ、ビーコン、冷蔵庫等）</li>
</ul>

<p>PeripheralがCentralに接続（ペアリング）されると、Peripheralはアドバタイジング・パケットのBroadcastを停止し、CentralがPeriferalで動作するGATTサーバと通信を開始する。通信に関しては、デフォルトで用意されているバッテリ、心拍のようなサービスも存在していますが、もちろん独自にサービスを作ることも可能になっています。それぞれのサービスにはそれぞれのCharastristicに属性を持っていて、読込み（バッテリーレベルの取得等）、書込み（設定の変更等）、また更新時に通知（心拍数のリアルタイム監視）してもらうことも可能です。Web Bluetooth APIを使って書いたサンプルを説明していきます。</p>

<h4>値の読込み</h4>

<p><img src="/wp-content/uploads/2016/06/bluetooth_getValue.png" alt="bluetooth_getValue" width="640" height="358" class="aligncenter size-full wp-image-19498" srcset="/wp-content/uploads/2016/06/bluetooth_getValue.png 640w, /wp-content/uploads/2016/06/bluetooth_getValue-300x168.png 300w, /wp-content/uploads/2016/06/bluetooth_getValue-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>コードはラップトップがCentral、何かしらのデバイスがPeripheralとなっていることを想定しています。まず、Centralのラップトップがnavigator.bluetooth.requestDevice(option)をCallして近隣のデバイスを探索します。optionにデバイスが山ほど列挙されないためにどの種類でフィルタするかを記述します。コードではバッテリのサービスは標準化されているので「batttery_service」と文字列で指定していますが、アドバタイジングパケットにはカスタマイズした値も書込むことが可能です。</p>

<p>navigator.bluetooth.requestDevice(option)をCallすることで探索が開始され、それと同時にアドレスバーの直下に該当するデバイスを列挙するポップアップが出てきます。ユーザがリストからデバイスを選択すると、JavaScript側ではそのデバイスのデバイス名、利用可能なサービスが格納されているオブジェクトにアクセスが可能になります。</p>

<p>ここでセキュリティに関する注意点。<br>
navigator.bluetooth.requestDevice(option)はユーザのインタラクションにて初めて動作します。デモではボタンクリックで開始していました。Localhost以外のホストでWeb Bluetoothを使う場合は、HTTPSでコンテンツがServeされたことを要求している。</p>

<p>device.get.connect()をCallしてGATTサーバと接続をします。その後に、server.getPrimaryService(&#8216;battery_service&#8217;)でバッテリサービスを取得、service.getCharacteristic(&#8216;battery_level&#8217;)で読込みたいCharacteristicを指定して取得、最後にcharacteristic.getValue()をCallすることで、バッテリのレベルの読込み（取得）をすることができます。</p>

<h4>値の書込み</h4>

<p><img src="/wp-content/uploads/2016/06/bluetoothapi_lookslike.png" alt="bluetoothapi_lookslike" width="640" height="360" class="aligncenter size-full wp-image-19496" srcset="/wp-content/uploads/2016/06/bluetoothapi_lookslike.png 640w, /wp-content/uploads/2016/06/bluetoothapi_lookslike-300x169.png 300w, /wp-content/uploads/2016/06/bluetoothapi_lookslike-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>先ほどとは違い、心拍センサをPeripheralとしています。その他、ハイライトされた部分が違います。charctristic.writeValue()にUint8Arrayにて、1バイトを引数に渡すことで書込みを行っています。</p>

<h4>更新の受取り</h4>

<p><img src="/wp-content/uploads/2016/06/bluetooth_notify.png" alt="bluetooth_notify" width="640" height="359" class="aligncenter size-full wp-image-19499" srcset="/wp-content/uploads/2016/06/bluetooth_notify.png 640w, /wp-content/uploads/2016/06/bluetooth_notify-300x168.png 300w, /wp-content/uploads/2016/06/bluetooth_notify-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>この例でも、心拍センサをPeripheralとしています。この例でも、ハイライトされた部分が違います。characteristicにcharacteristicvaluechangedのイベント名でEventハンドラを設定し、beepという関数をCallbackとして指定しています。characteristic.startNotifications()で、更新の受け取りを開始します。これで、更新がある度にbeepが実行されます。</p>

<p>続いて、心拍センサを動作させるデモです。私（François氏）は心拍センサをつけています。リアルタイムに値を受け取ることができますので、ちょっと見てみましょう。通常私の心拍数は60-80ですが、今はどうでしょう？</p>

<p><img src="/wp-content/uploads/2016/06/francis_heartrate.png" alt="francis_heartrate" width="640" height="361" class="aligncenter size-full wp-image-19504" srcset="/wp-content/uploads/2016/06/francis_heartrate.png 640w, /wp-content/uploads/2016/06/francis_heartrate-300x169.png 300w, /wp-content/uploads/2016/06/francis_heartrate-207x117.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>（普段の倍近くの心拍数が表示されChris氏も会場も爆笑）<br>
次に実際にリアルタイムに心拍数を受け取っていることを証明するために腕立て伏せをしてみます。（前編の最後に掲載さいた画像はここでの1シーンです）<br>（が、ペアリングが切断されたのか動作せず……そして、今度はChris氏も会場も大爆笑！失敗するということは、デモがリアルタイムに行われている証拠です！）</p>

<p>私以外にも、Web Bluetoothで遊んでいる同僚たちもいます。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2016/06/bletoy00.png" alt="bletoy00" width="640" height="361" class="aligncenter size-full wp-image-19505" srcset="/wp-content/uploads/2016/06/bletoy00.png 640w, /wp-content/uploads/2016/06/bletoy00-300x169.png 300w, /wp-content/uploads/2016/06/bletoy00-207x117.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Web Bluetoothでラジコンカーをコントロール</figcaption>
</figure></p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2016/06/bletoy01.png" alt="bletoy01" width="640" height="359" class="aligncenter size-full wp-image-19506" srcset="/wp-content/uploads/2016/06/bletoy01.png 640w, /wp-content/uploads/2016/06/bletoy01-300x168.png 300w, /wp-content/uploads/2016/06/bletoy01-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Web Bluetoothでプリンタをコントロール</figcaption>
</figure></p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2016/06/bletoy02.png" alt="bletoy02" width="640" height="359" class="aligncenter size-full wp-image-19507" srcset="/wp-content/uploads/2016/06/bletoy02.png 640w, /wp-content/uploads/2016/06/bletoy02-300x168.png 300w, /wp-content/uploads/2016/06/bletoy02-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Web BluetoothでBB-8をコントロール</figcaption>
</figure></p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2016/06/bletoy03.png" alt="bletoy03" width="640" height="359" class="aligncenter size-full wp-image-19508" srcset="/wp-content/uploads/2016/06/bletoy03.png 640w, /wp-content/uploads/2016/06/bletoy03-300x168.png 300w, /wp-content/uploads/2016/06/bletoy03-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Web BluetoothでLEDをコントロール</figcaption>
</figure></p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2016/06/Screen-Shot-2016-06-05-at-1.20.56-AM.png" alt="Screen Shot 2016-06-05 at 1.20.56 AM" width="640" height="359" class="aligncenter size-full wp-image-19509" srcset="/wp-content/uploads/2016/06/Screen-Shot-2016-06-05-at-1.20.56-AM.png 640w, /wp-content/uploads/2016/06/Screen-Shot-2016-06-05-at-1.20.56-AM-300x168.png 300w, /wp-content/uploads/2016/06/Screen-Shot-2016-06-05-at-1.20.56-AM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Web Bluetoothで空飛ぶ猫をコントロール</figcaption>
</figure></p>

<p>Bluetoothのパケット通信の中身を見るときはAndroidを使うのが最も簡単な方法です。AndroidのDeveloper Optionにある「Bluetooth HCI snoop log」を有効にしてください。（詳しくは<a href="http://wifimanager.hateblo.jp/entry/2016/06/02/204600" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">この辺り</a>を参照してみてください）</p>

<p><img src="/wp-content/uploads/2016/06/support_browser.png" alt="support_browser" width="640" height="358" class="aligncenter size-full wp-image-19511" srcset="/wp-content/uploads/2016/06/support_browser.png 640w, /wp-content/uploads/2016/06/support_browser-300x168.png 300w, /wp-content/uploads/2016/06/support_browser-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>現在Web BluetoothをサポートしているブラウザはOperaとChromeOS、マシュマロ上で動作しているChrome for Android、Chrome for LinuxでChromeでは chrome://flags/#enable-web-bluetooth （アドレスバーにコピー＆ペーストしてください）を有効にすることで利用することが可能です。Mac、WindowsのChromeへは現在実装中です。</p>

<p>開発の助けになるであろう以下の2つを紹介します。</p>

<ul>
<li>Get Start with Web Bluetooth (<a href="https://html5experts.jp//goo.gl/MLKzj2" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">goo.gl/MLKzj2</a>)：コードジェネレータ</li>
<li>Web Bluetooth Developer Studio Plugin (<a href="https://html5experts.jp//goo.gl/c2ype5" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">goo.gl/c2ype5</a>)：Bluetooth SIGが提供している<a href="https://www.bluetooth.com/~/media/developer-studio/index" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Bluetooth Developer Studio</a>向けのPlug-in</li>
</ul>

<p>WebアプリからでもNativeアプリと同じように、Bluetoothでデバイスを操作できるようになりました。また、Webアプリですので、URLをシェアすることで、誰でもスグにアプリを利用できるようになります。当たり前のことかもしれませんが、これがWeb Platformの大きな強みです。</p>

<h4>Physical Webとの連携</h4>

<p>URLを載せたBluetoothのパケットをビーコンからブロードキャストするPhysical Webですが、これがもしBluetoothのアプリからブロードキャストできたらどうでしょう？</p>

<p>URLをPhysical Web経由で受け取り、そのURLにアクセスするとBluetoothデバイスをコントロールするアプリが表示され、Bluetoothデバイスとのペアリングが完了したら、その直後からBluetoothの利用が可能になりますよね。今までのアプリを検索してインストールする等の作業が一切必要がなくなり、通知エリア(Notification Area)に通知されたURLにアクセスするだけでペアリングも含め、Bluetoothデバイスを利用する準備が整うことになります。</p>

<p>今後、Web BluetoothはPhysical Webの機能を組み込み、前述の動作を一気通貫でJavaScriptで実装できるような機能を追加する予定です。</p>

<p>Codelabも<a href="https://codelabs.developers.google.com/codelabs/candle-bluetooth/index.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Control a PLAYBULB candle with Web Bluetooth</a>と<a href="https://codelabs.developers.google.com/codelabs/polymer-bluetooth/index.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Interactive with Bluetooth devices on the web with Polymer</a>もありますので、是非挑戦してみてください。</p>

<p>（再びChris氏）</p>

<h4>Web USB</h4>

<p>Web USBは現存する全てのUSBデバイスに接続しようと考えているわけではなくて、Firmwareへのアクセスを許可されているような新しい種類のデバイスに適用されます。</p>

<h2>まとめ</h2>

<p>ここではカバーしきれなかった、まだまだ多くの以下の様な機能が進行中です。</p>

<p><img src="/wp-content/uploads/2016/06/note_covered.png" alt="note_covered" width="640" height="358" class="aligncenter size-full wp-image-19515" srcset="/wp-content/uploads/2016/06/note_covered.png 640w, /wp-content/uploads/2016/06/note_covered-300x168.png 300w, /wp-content/uploads/2016/06/note_covered-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>さらに、まだデザインも始めていないPersistent Storageとか、Web Intents v2もあります。</p>

<p>そろそろ時間です。我々がWeb Platformの未来にワクワクしているのと同じくらいに、皆さんもワクワクしていることを期待しています。</p>

<p><a href="https://html5experts.jp//developers.google.com/web/updates/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">developers.google.com/web/updates/</a> にさらなる情報がありますので、お時間がありましたらご覧ください。</p>

<p>（というところで、セッションは終了しました）</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2016/06/IMG_34891.jpg" alt="IMG_3489" width="640" height="443" class="aligncenter size-full wp-image-19360" srcset="/wp-content/uploads/2016/06/IMG_34891.jpg 640w, /wp-content/uploads/2016/06/IMG_34891-300x208.jpg 300w, /wp-content/uploads/2016/06/IMG_34891-207x143.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>セッション終了後の素敵な笑みを浮かべるChris氏とガッツポーズのFrançois氏</figcaption>
</figure></p>

<p>ありがとうございました＆お疲れ様でしたっ！！！</p>
]]></content:encoded>
			</item>
		<item>
		<title>Web Music Developer Meetup@札幌レポート</title>
		<link>/ryoyakawai/17532/</link>
		<pubDate>Fri, 25 Dec 2015 00:00:02 +0000</pubDate>
		<dc:creator><![CDATA[河合良哉]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[MIDI]]></category>
		<category><![CDATA[TPAC]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Web Music]]></category>

		<guid isPermaLink="false">/?p=17532</guid>
		<description><![CDATA[本記事は2015年10月25日に札幌で行われたWeb Music Developer Meetup@札幌のレポートです。 Meetupを「札幌」で行うキッカケ 2015年10月末はなぜか札幌でのイベントが多かったと思いま...]]></description>
				<content:encoded><![CDATA[<p>本記事は2015年10月25日に札幌で行われたWeb Music Developer Meetup@札幌のレポートです。<br />
<img src="/wp-content/uploads/2015/11/sapporo01.jpg" alt="sapporo00" width="480" class="aligncenter size-large wp-image-17539" /></p>

<h1>Meetupを「札幌」で行うキッカケ</h1>

<p>2015年10月末はなぜか札幌でのイベントが多かったと思いますが、これ実はW3C Technical Plenary / Advisory Committee(通称：TPAC、てぃーぱっく)というMeetingが札幌で行われたからなのです。</p>

<p>詳細は<a href="https://html5experts.jp/yusuke-naka/16710/" data-wpel-link="internal">Web技術の最新動向と未来を知る！〜Leading the way to W3C TPAC 2015〜【TPAC紹介編】</a>にも書かれていますが、ここでも軽くご説明します。TPACとはWebの標準化団体であるW3Cが年に1回行う全体会合で、通常10月最終週の5日間で北米、ヨーロッパ、アジアのどこかで開催されます。</p>

<p><strong>全体会合</strong>とはいえ、5日間通して全体会議をしている訳ではなくて、実際に全体で集まるのはたいて中間日のTechnical Plenary Dayと呼ばれる日。この日だけはアンカンファレンス形式で進められ、当日の朝に話したい内容がある人が場所を確保して分科会(Breakout Session)を行う、という流れになっています。
<figure>
<img src="/wp-content/uploads/2015/11/breakout00.jpg" alt="breakout00" width="640" class="aligncenter size-medium wp-image-17535" srcset="/wp-content/uploads/2015/11/breakout00.jpg 640w, /wp-content/uploads/2015/11/breakout00-300x200.jpg 300w, /wp-content/uploads/2015/11/breakout00-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption class="aligncenter">分科会の場所を確保する様子</figcaption>
</figure></p>

<p>この日以外は、W3Cにある43のワーキング・グループ（2015年11月6日現在）からそれぞれが議論したい内容、メンバーのスケジュールから日程設定してFace to Faceでのミーティングを行っています。たいていの場合メンバーは世界各国に散らばっているため、普段は電話での会議をしているので顔を合わせてミーティングを行うのは、非常に貴重な時間となっています。</p>

<p>前段が長くなりましたが、ここから本題です。Web Audio API、Web MIDI API（Web Music）の仕様を策定しているのはW3Cのオーディオ・ワーキンググループ(Audio WG)。今回のTPACでは26日、27日にミーティングを行うことになりましたので、せっかくのこの機会に「Audio WGのメンバーとイベントやろう！」と思い立ったのが、今回のMeetupのキッカケです。</p>

<h1>「札幌」でWeb Musicは初めて</h1>

<p>今まで日本で開催されたWeb Music関連イベントは、東京と京都でのハッカソンとMeetup1回だったので、北海道では初めて。そこで、Meetupにして「Web Musicとはなんぞ？」を中心に伝えられるように、以下の方々に登壇していただきました。</p>

<ul>
<li><a href="https://html5experts.jp//twitter.com/ryoyakawai" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">かわい りょうや</a>（開発者、私です）</li>
<li><a href="https://html5experts.jp//twitter.com/cwilso" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Chris Wilson 氏</a> (Web Audio/MIDI 仕様の編集者)</li>
<li><a href="https://html5experts.jp//twitter.com/aike1000" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">藍 圭介 氏</a>（開発者）</li>
<li><a href="https://html5experts.jp//twitter.com/toyoshim" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">豊島 隆志 氏</a>（ChromiumコミッターでWeb MIDI APIの実装者）</li>
<li><a href="https://html5experts.jp//twitter.com/joeberkovitz" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Joe Berkovitz 氏</a> (Audio WGの共同議長)</li>
<li><a href="https://html5experts.jp//twitter.com/sascacci" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">渡邊 正和 氏</a>（開発者：VJアプリを主に開発）</li>
</ul>

<h1>セッションの内容</h1>

<h3>かわい りょうや</h3>

<p>Web Audio、Web MIDIとは何か、何ができるのか、どのブラウザで使えるのかを中心に話をしました<a href="https://html5experts.jp/ryoyakawai/12569/" data-wpel-link="internal">ブラウザで電子楽器を作ってみよう！</a>でご紹介したWeb Audioで作ったアナログ・シンセ、FMシンセの紹介とデモを行い、基本的な使い方とできることの説明、またそれに加えて今回はServiceworkerを使ったオフラインでの動作のデモ、またデスクトップからアプリを起動できるWebApp Manifestのデモも実施。モバイル上でもWebアプリは進化していてNativeアプリに近づいていることの説明を行いました。<br />
▶ <a href="https://www.slideshare.net/ryoyakawai/web-musicdevelopersmeetupsapporo" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><strong>スライド</strong></a></p>

<h3>Chris Wilson 氏</h3>

<p><img src="/wp-content/uploads/2015/11/cwilso-300x200.jpg" alt="cwilso" width="300" height="200" class="aligncenter size-medium wp-image-17597" srcset="/wp-content/uploads/2015/11/cwilso-300x200.jpg 300w, /wp-content/uploads/2015/11/cwilso.jpg 640w, /wp-content/uploads/2015/11/cwilso-207x138.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" />
<strong>Making the Web Rock</strong>というタイトルで<a href="http://webaudiodemos.appspot.com/MIDIDrums/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Drum Machine</a>、<a href="https://webaudiodemos.appspot.com/Vocoder/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ボコーダー</a>、<a href="https://webaudiodemos.appspot.com/input/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Audio Input Effect</a>、<a href="http://webaudiodemos.appspot.com/wubwubwub/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">DJ</a>と次々にデモを披露していただき、「Web Audio API、Web MIDI APIを使うとWebブラウザ上でここまでできます」という点を幅広く説明してくれました。また「この<a href="https://aerotwist.com/blog/guitar-tuner/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Webアプリのチューナ</a>ができたおかげでOSネイティブなチューナーアプリ（iOSやAndroidのアプリ）は全部消した」という実話も披露していただきました。チューナーとは音の周波数（音程）を正しく調整する為に使う器具のことです。<br />
▶ <a href="http://webaudiodemos.appspot.com/slides/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><strong>スライド</strong></a></p>

<p>ここでChris氏の発表の中から「Webアプリのチューナ以外のOSネイティブなチューナーアプリを削除できた」という点について、旬な話題ですので少しだけご紹介します。</p>

<p><strong>どのようにWebアプリのチューナーが実装されているか</strong><br />
チューナーは例えばギターの弦1本1本を正しく調整（チューニング）する為に、1本の弦を弾いた時に発せられる音声を入力して周波数を正しく表示します。この表示に従って、弦毎にあるべき周波数にチューニングをすることで常に正しい音で演奏しています。このチューニングは演奏する間に必ず行うので、自宅のみならず、あらゆる場所で動作することが求められます。ここでまとめるとチューナーという器具には最低限以下の2つの要件を満足することが求められます。</p>

<ul>
<li>入力した音声の周波数を正しく表示する</li>
<li>携帯性に優れている</li>
</ul>

<p>モバイル・デバイスのアプリ（iOSアプリケ、androidアプリ；以後「モバイルアプリ」と略します）で製作したチューナーはこれらの2つの要件を満足します。チューニングに関してはマイクから入力した音の周波数を正しく表示するよく知られたアルゴリズムがありますし、携帯性に関してもチューナーアプリを一度ダウンロードしてインストールしてしまえばネットワークへの接続に左右されることなく携帯端末上で動作することが可能ですので、  場所を選ばずどこでも動作します。<br />
前置きが長くなりましたが、ここからがこの2つの要件をどうやってWebアプリとして再現するのか？という点です。1つ目の「入力した音声の周波数を正しく表示する」に関しては、getUserMedia()を使いマイク入力をWeb Audio APIを使って周波数を割り出せばなんとか出来そうだと、とお気づきになると思います。しかしながら「携帯性に優れている」の点はいかがでしょうか？ネットワーク接続なしにどうやってWebアプリを動作させるのでしょうか？<br />
その解決には <em>Service Worker</em> を使います。Webアプリを最初に起動した時に、アプリ全体をキャッシュしてしネットワーク接続のに場合はそのキャッシュを利用してアプリを動かすのです。WebアプリのチューナのService Workerの実装は<a href="https://guitar-tuner.appspot.com/sw.js" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ココ</a>にされています。詳しい解説はここでは割愛しますが、Servive Workerインストール時（最初にサイトを表示した時と考えていただいて問題ありません）に、以下の部分でWebアプリのチューナーに必要なファイルをキャッシュしていることが分かります。</p>

<p></p><pre class="crayon-plain-tag">self.oninstall = function(event) {

  var urls = [

    '/',
    '/images/chrome-touch-icon-192x192.png',

    '/scripts/guitartuner-core.js',

    '/elements/audio-processor/audio-processor.html',
    '/elements/audio-visualizer/audio-visualizer.html',
    '/elements/tuning-instructions/tuning-instructions.html',
    '/elements/tuning-instructions/tick.svg',
    '/elements/tuning-instructions/up-down.svg',

    '/third_party/polymer.html',
    '/third_party/webcomponents-lite.min.js',

    '/third_party/Roboto/Roboto-100.woff2',
    '/third_party/Roboto/Roboto-300.woff2',
    '/third_party/Roboto/Roboto-400.woff2',

    '/favicon.ico',
    '/manifest.json'

  ];

  urls = urls.map(function(url) {
    return new Request(url, {credentials: 'include'});
  });

  event.waitUntil(
    caches
      .open(CACHE_NAME + '-v' + CACHE_VERSION)
      .then(function(cache) {
        return cache.addAll(urls);
      })
  );

};</pre><p></p>

<p>もう1点は起動に関してです。Webアプリとして再現できたのに、起動がブラウザのブックマークからだったり、URLバーが表示されていては少しガッカリです。androidであれば、Webアプリであっても、ホーム画面のアイコンから起動し、URLバーを表示しないことが可能です。また起動時のデバイスの向き、スプラッシュ画面（起動処理中に表示する画像）を設定することも可能です。これを <em>Web App Manifest</em> と呼ばれる機能になります。Webアプリのチューナでは<a href="https://guitar-tuner.appspot.com/manifest.json" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ココ</a>に実装されています。</p>

<p></p><pre class="crayon-plain-tag">{
  "short_name": "Guitar Tuner",
  "name": "Guitar Tuner",
  "start_url": "./?utm_source=web_app_manifest",
  "icons": [
    {
      "src": "/images/chrome-touch-icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    }
  ],
  "display": "standalone",
  "orientation": "portrait"
}</pre><p> 
この数行のJSONを設置して、メインとなるHTMLには以下の1行を追加して読み込ませたらモバイルアプリと同じユーザー体験（ホーム画面からの起動）を提供することが可能になります。
</p><pre class="crayon-plain-tag">&lt;link rel="manifest" href="/manifest.json"&gt;</pre><p></p>

<p>詳細な説明は割愛してしまいましたが、こういった技術を使ってProgressive Web Appsを作ってみてはいかがでしょうか？</p>

<h3>藍 圭介 氏</h3>

<p><img src="/wp-content/uploads/2015/11/aike-300x200.jpg" alt="aike" width="300" height="200" class="aligncenter size-medium wp-image-17599" srcset="/wp-content/uploads/2015/11/aike-300x200.jpg 300w, /wp-content/uploads/2015/11/aike.jpg 640w, /wp-content/uploads/2015/11/aike-207x138.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" />
<strong>Web Audio API Creative Coding</strong>というタイトルで、moogのアナログシンセのWeb版の<a href="http://aikelab.net/websynth/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">2D版</a>、<a href="http://aikelab.net/websynthv2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">3D版</a>、それ以外にもセンサーを使うことで<a href="http://aikelab.net/iphonewah/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Wahペダル</a>だったり、<a href="http://aikelab.net/sw/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ライトセーバー</a>のような動きに反応するアプリケーションも作ることが可能というデモを実施。Web Audio/MIDI以外のAPIとの親和性も高く、手軽に使えることから「Web Audio/MIDIは音楽のためのみならず、表現メディアのプラットフォームになり得る」という点をご説明してくださいました。<br />
▶ <a href="http://aikelab.net/wmmu/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><strong>スライド</strong></a></p>

<h3>豊島 隆志 氏</h3>

<p><img src="/wp-content/uploads/2015/11/toyoshim-300x200.jpg" alt="toyoshim" width="300" height="200" class="aligncenter size-medium wp-image-17600" srcset="/wp-content/uploads/2015/11/toyoshim-300x200.jpg 300w, /wp-content/uploads/2015/11/toyoshim.jpg 640w, /wp-content/uploads/2015/11/toyoshim-207x138.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" />
<strong>Chrome Web MIDI 2015</strong>というタイトルで発表。実際にChromeに実装をしているので、今までのWeb MIDIの実装の歴史、AndroidのWeb ViewでもOperaでもElectronでもChromeと同じようにWeb MIDIが使えるようになっていること、Firefoxでの実装状況、Web MIDI APIの使われる頻度等、APIを実装するという視点から発表をしてくれました。<br />
▶ <a href="http://www.slideshare.net/toyoshim/chrome-web-midi-2015-54372357" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><strong>スライド</strong></a></p>

<h3>Joe Berkovitz 氏</h3>

<p><img src="/wp-content/uploads/2015/11/joe-300x200.jpg" alt="joe" width="300" height="200" class="aligncenter size-medium wp-image-17601" srcset="/wp-content/uploads/2015/11/joe-300x200.jpg 300w, /wp-content/uploads/2015/11/joe.jpg 640w, /wp-content/uploads/2015/11/joe-207x138.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" />
<strong>Music Notation and W3C:
Framing the Future</strong>というタイトルでの発表。Audio WGの共同議長でもあり、また2015年7月にW3CでMusic Notation Community Group(楽譜に関するグループ)の立ち上げも行っており、普段はnoteflight Inc.にてブラウザ上で楽譜を表示、演奏するアプリケーションを開発しています。今回の発表では、Noteflightが実際に楽譜表示を軸にどういった機能を実装しているのか、またWeb上で表示できるようになるとどう変わるのかをデモを交えながらの発表でした。<br />
▶ <a href="https://html5experts.jp/wp-content/uploads/2015/11/MusicNotationNext.pdf" data-wpel-link="internal"><strong>スライド(PDF)</strong></a></p>

<h3>渡邊 正和 氏</h3>

<p><img src="/wp-content/uploads/2015/11/watanabe-300x200.jpg" alt="watanabe" width="300" height="200" class="aligncenter size-medium wp-image-17602" srcset="/wp-content/uploads/2015/11/watanabe-300x200.jpg 300w, /wp-content/uploads/2015/11/watanabe.jpg 640w, /wp-content/uploads/2015/11/watanabe-207x138.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" />
<strong>ライブパフォーマンス、その他（例えば教育）でのWeb Audio/MIDIの活用事例</strong>を紹介。Audio/MIDIがWeb上で使えることで拡がった、音楽の世界を語ってくれました。<a href="https://dl.dropboxusercontent.com/u/50143793/app/lissajous_float.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">リサジューのデモ</a>も披露。</p>

<ul>
<li><a href="http://sascacci-blog.tumblr.com/post/126325315693/takashi-mori-x-masakazu-watanabe" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Takashi Moriさんの演奏とのコラボ</a></li>
<li><a href="http://sascacci-blog.tumblr.com/post/132239501178/networks" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">NETWORKSとのコラボ</a></li>
<li><a href="http://sascacci-blog.tumblr.com/post/127920844973/%E3%82%A8%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AD%E3%83%9C%E3%82%A4%E3%82%B9%E3%81%A8%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%AB%E3%82%A2%E3%83%BC%E3%83%88" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">エレクトロボイスとビジュアルアート</a></li>
</ul>

<h1>Lightning Talk</h1>

<p>3名、1団体からの発表がありました。</p>

<ul>
<li><a href="https://twitter.com/aklaswad" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">@aklaswad</a>さん:
wani[WebAudio N Interface]の<a href="http://aklaswad.github.io/wani/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">デモ</a></li>
<li><a href="https://twitter.com/edy555" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">高橋さん</a>：<a href="https://github.com/ttrftech/threejs-spectrum" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ワンセグチューナーから電波を拾ってthree.jsで電波を表示するデモ</a></li>
<li><a href="https://twitter.com/plusadd" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">小池さん</a>：楽譜アプリのpiaScoreの説明とPlasaddがスタッフ募集している件、</li>
<li><a href="http://jp.yamaha.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ヤマハ株式会社</a>：MIDI、音楽系でよく使われるOSC(OpenSound Control)と、Web Socketをごちゃ混ぜのシステムでも簡単に構築できるRaspberry Piで作ったシステムの紹介がありました。</li>
</ul>

<h1>Meetupを終えて</h1>

<p>今回Audio WGでコアに動いている方のほとんどがMeetupに足を運んでくれたこともあって、日本の皆さんにはもとより、Audio WGの皆様には「こういう使われ方もしている」という現状を見ていただけて、とてもよい機会になったと思っています。今後もこういう機会があったら企画したいと考えています。<br />
▶ <a href="https://plus.google.com/u/0/events/coke57atppv4rvgkiueu5mco7tg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><strong>写真等</strong></a></p>

<h1>おまけ：Web Audio、Web MIDIの進捗に関して</h1>

<p>W3Cが定める仕様策定までの5段階のうち、Web Audio/MIDI共に、現在は1つ目の段階（WD:Working Draft）です。しかし、Web Audioは次の段階（LC:Last Call）へと進む気配があります。早くて年内、遅くとも来年4月（<a href="http://webaudio.gatech.edu/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Audio Conference 2016があります</a>）ではないでしょうか。またWeb MIDIに関してもFirefoxに実装が進んでいてMac OSでは動いているとのことですので、こちらも次の段階へ進むことへの期待ができるでしょう。</p>

<p><figure>
<img src="/wp-content/uploads/2015/11/audiowg-640x427.jpg" alt="audiowg" width="640" height="427" class="aligncenter size-large wp-image-17579" srcset="/wp-content/uploads/2015/11/audiowg.jpg 640w, /wp-content/uploads/2015/11/audiowg-300x200.jpg 300w, /wp-content/uploads/2015/11/audiowg-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption class="aligncenter">Audio WGのミーティングの様子</figcaption>
</figure></p>

<p>それでは、今後もWeb Musicをよろしくお願いします！</p>
]]></content:encoded>
			</item>
		<item>
		<title>Web上で一緒に音楽を作ろう！オンラインスタジオ「Soundtrap」で音楽制作</title>
		<link>/ryoyakawai/7736/</link>
		<pubDate>Tue, 29 Jul 2014 00:00:57 +0000</pubDate>
		<dc:creator><![CDATA[河合良哉]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Dart]]></category>
		<category><![CDATA[Google I/O 2014]]></category>
		<category><![CDATA[MIDI]]></category>
		<category><![CDATA[モバイル]]></category>

		<guid isPermaLink="false">/?p=7736</guid>
		<description><![CDATA[連載： Google I/O 2014 特集 (6)概要 Google I/O 2014のセッションの1つ「Making music mobile with the Web」のレポート記事です。Officialに公開され...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/google-io-2014-2/" class="series-191" title="Google I/O 2014 特集" data-wpel-link="internal">Google I/O 2014 特集</a> (6)</div><h2>概要</h2>

<p>Google I/O 2014のセッションの1つ「Making music mobile with the Web」のレポート記事です。Officialに公開されているYouTubeは<a href="https://www.youtube.com/watch?v=PMH1vM-dSc0" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">こちら</a>です。</p>

<p>OpenWeb 技術であるWebRTC、Web Audio APIは一度は耳にしたことのあると思います。この2つの技術、そして標準化が始まったばかりのWeb MIDI API（電子楽器とブラウザを直接接続するAPI）を利用した音楽制作アプリケーション「<a href="https://www.soundtrap.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Soundtrap</a>」。これらを使って、実際にセッションのオーディエンス、遠隔地の人とコラボレーションをして、Google I/Oのテーマ曲を作成するデモンストレーション中心のセッションでした。本レポートと合わせて映像もぜひご覧ください！</p>

<p>このセッションでは、主にモバイル端末（Nexus 7、Nexus 5）を使って進行されました。Webアプリといえば、JavaScriptでの構築を想像される方も少なくないので意外でした。しかしながら、「Soundstrap」は<a href="https://www.dartlang.org/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Dart</a>で開発されていたところでした。(開発言語にDartを選択した理由も、後ほど説明していきます)</p>

<p>それでは内容を見ていきましょう。</p>

<p>※2014/7/4にDartは、ECMA標準仕様として承認されたと<a href="http://news.dartlang.org/2014/07/ecma-approves-1st-edition-of-dart.html" title="Ecma approves the 1st edition of the Dart language specification" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">発表</a>がありました。</p>

<h2>音楽制作</h2>

<p>音楽制作にはいろいろな進め方がありますが、このセッションでは以下の順で録音が進められました。</p>

<ol>
  <li>リズムの選択 (<a href="http://youtu.be/PMH1vM-dSc0?t=1m49s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">1:49-</a>)</li>
  <li>Bass の録音 (<a href="http://youtu.be/PMH1vM-dSc0?t=3m2s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">3:02-</a>)</li>
  <li>Guitar(メロディー)の録音 (<a href="http://youtu.be/PMH1vM-dSc0?t=15m11s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">15:11-</a>)</li>
  <li>Keyboard(伴奏)シーケンスの作成 (<a href="http://youtu.be/PMH1vM-dSc0?t=16m28s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">16:28-</a>)</li>
  <li>Vocal の録音 (<a href="http://youtu.be/PMH1vM-dSc0?t=23m30s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">23:30-</a>)</li>
  <li>Mix Down (<a href="http://youtu.be/PMH1vM-dSc0?t=34m55s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">34:55-</a>)</li>
</ol>

<h3>1. リズムの選択</h3>

<p>曲のベースとなるリズムを決めます。Soundtrapにあらかじめ用意されているLoop素材を追加し、リズムを聴きながら「ん～」とか「もっとRockしてるのがいいな～」とかコメントしながら選択を終えました。</p>

<h3>2. Bassの録音</h3>

<p>Bassの音はあまり耳には聞こえませんが、実は曲の重要な土台となる低音パートです。 Bassの録音をすると、リズムしかなかった曲の輪郭がモヤっと見えてきます。</p>

<div id="attachment_8892" style="width: 710px" class="wp-caption aligncenter">
<a href="http://youtu.be/PMH1vM-dSc0?t=3m2s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">
<img src="/wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-6.59.32-PM.png" alt="RecordingBass" width="540" class="aligncenter size-full wp-image-9157" style="border:1px solid #dddddd" srcset="/wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-6.59.32-PM.png 640w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-6.59.32-PM-300x165.png 300w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-6.59.32-PM-207x113.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
</a>
<p class="wp-caption-text">Bassを録音する様子</p>
</div>

<p>Media Capture APIの1つである、getUserMedia()を使って録音します。</p>

<p><img src="/wp-content/uploads/2014/07/Screen-Shot-2014-07-10-at-12.47.22-AM.png" alt="getusermedia01" width="540" height="128" class="aligncenter size-full wp-image-8494" style="border:1px solid #dddddd" srcset="/wp-content/uploads/2014/07/Screen-Shot-2014-07-10-at-12.47.22-AM.png 540w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-10-at-12.47.22-AM-300x71.png 300w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-10-at-12.47.22-AM-207x49.png 207w" sizes="(max-width: 540px) 100vw, 540px" /></p>

<p>getUserMedia()は、マイクからのInput、WebカメラからのビデオStreamを取得する時に使います。マイクからのInputを取得する時は、スピーカーからの出力をマイクが拾わないようにAEC(Acoustic Echo Canceling)、またマイクからのInputのレベルを保つために AGC(Auto Gain Control)を行うことが可能です。マイク以外の入力を取得する場合（Line入力：ギター、シンセサイザー等）は必要ないので、今回もOffにします。コードは以下のように書きます。</p>

<p></p><pre class="crayon-plain-tag">navigator.getUserMedia({audio:{echoCancellation: false}}).then((stream) {
  // 実際の処理をここに書きます
});</pre><p></p>

<p><code>then()</code> が見慣れない書き方かもしれませんが、これはDartに実装されている Futureという並列処理デザインパターンです。streamを得た時にどんな処理をするのかを、<code>then()</code>の中に書きます。</p>

<h3>3. Guitar（メロディー）の録音</h3>

<p>Guitarで主旋律パートを録音します。主旋律ですので向かう方向がハッキリします。</p>

<p><a href="http://youtu.be/PMH1vM-dSc0?t=15m11s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"></p>

<div id="attachment_8892" style="width: 710px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-7.02.26-PM.png" alt="RecordGuitar" width="540" class="aligncenter size-full wp-image-9158" style="border:1px solid #dddddd" srcset="/wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-7.02.26-PM.png 640w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-7.02.26-PM-300x164.png 300w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-7.02.26-PM-207x113.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
</a>
<p class="wp-caption-text">Guitarの録音をする様子</p>
</div>

<p>Bassの録音と同じく、getUserMedia()を使って録音します。</p>

<p>特にギターの場合、エフェクターという専用の信号処理機械を通して音を作ることが多いです。エフェクトの種類は音を遅らすDelay、音程を微妙にズラすことで複数でコーラスをしているかのようなハーモニーを作るChorus、音を歪ませることで音に角を付け、いわゆるエレキギターと聞いて想像する音を作るFuzz、Distortion、Overdriveがありますが、これらのエフェクトもブラウザで行ってしまいます。（<a href="http://youtu.be/PMH1vM-dSc0?t=8m49s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">セッション内でのデモ</a>）</p>

<p>これらのエフェクトは、以下のように接続します。</p>

<p><img src="/wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-10.15.57-AM.png" alt="WebAudio_Pipeline" width="540" class="aligncenter size-full wp-image-8675" style="border:1px solid #dddddd" /></p>

<p>Input(getUserMedia()からのAudioStream)をWebAudioで作成したEffectsを通し、WebAudioでの音声の出力口であるDestinationに接続します。</p>

<p>Delayエフェクトの接続方法を例にとって、実際に説明をします。</p>

<p><img src="/wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-10.21.33-AM.png" alt="WebAudio_DelayNode" width="540" class="aligncenter size-full wp-image-8681" style="border:1px solid #dddddd" srcset="/wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-10.21.33-AM.png 397w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-10.21.33-AM-300x68.png 300w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-10.21.33-AM-207x47.png 207w" sizes="(max-width: 397px) 100vw, 397px" /></p>

<p>Guitarの音(Input)を直接Destination、またDelayに接続します。Delayで任意の時間遅らせて発音した音を、Gainに接続して音量を絞ります。最後にDelayで遅らせ、音量を絞った音をDestinationに接続します。結果としてギターで弾いた音は、山に向かって「ヤッホー」と叫びやまびこを楽しんでいる人の隣で聞いているかのような効果、つまりEffectが得られるのです。</p>

<p>この接続をコードにすると、以下のようになります。</p>

<p></p><pre class="crayon-plain-tag">var context = new AudioContext();

// getUserMediaのAudioStreamをWebAudioに接続する
navigator.getUserMedia({audio:true}).then((stream){
  var guitar = context.createMediaStreamSource(stream);
  var speaker = context.destination;
  guitar.connect(speaker);
});

// Delayエフェクトの接続
var delay = context.createDelay();
guitar.connect(delay);

var gain = context.createGain();
delay.connect(gain);

// Delayエフェクトをかけた音を、出力口のSpeaker(Destination)に接続
gain.connect(speaker);</pre><p></p>

<h3>4. Keyboard(伴奏)シーケンスの作成</h3>

<p>そして、Keyboardで伴奏パートのシーケンスの作成を行います。伴奏が入ると曲がハッキリし、各楽器通しでハーモニーが生まれます。</p>

<div id="attachment_8892" style="width: 710px" class="wp-caption aligncenter">
<a href="http://youtu.be/PMH1vM-dSc0?t=16m28s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">
<img src="/wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-6.46.31-PM.png" alt="playKeyboardWithWebRTC" width="540" class="aligncenter size-full wp-image-9154" style="border:1px solid #dddddd" srcset="/wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-6.46.31-PM.png 640w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-6.46.31-PM-300x169.png 300w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-6.46.31-PM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
</a>
<p class="wp-caption-text">左下小窓がMoscone Center West、全体がGoogle San Francisco OfficeからWebRTC でStreamingしている様子</p>
</div>

<p>WebRTCを使って、上の画像のように遠隔地から行います。Google I/Oの会場である<a href="https://www.google.co.jp/maps/place/Moscone+Center+West/@37.783083,-122.404025,17z/data=!3m2!4b1!5s0x808580871e84c835:0x6898ed8f6d5ebf0b!4m2!3m1!1s0x80858087111726eb:0x635ab8069f6523c3?hl=ja" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Moscone West</a>と<a href="https://www.google.co.jp/maps/preview?q=google+san+francisco+office&amp;hl=ja&amp;ie=UTF-8&amp;ei=0Um_U-GyII708QW_noCoDw&amp;ved=0CAgQ_AUoAQ&amp;source=newuser-ws" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">GoogleさんのSan Francisco Office</a>を接続し、シーケンスを直接Soundtrapに作成します。Keyboardの演奏はWeb MIDI APIを使い、Keybord（電子楽器）とブラウザを接続して演奏データはMIDI Messageの形式(音声データではなく、「どの音を、どの強さで鳴らせ/止めろ」というような指示を表現したメッセージ)で時間と一緒に記録（シーケンスの作成）を行い、再生する時には記録された時間通りにMIDI MessageをSoundtrap上にあるSoftwearシンセサイザーに送信して、Softwareシンセサイザーが音を出しています。</p>

<p>セッションの中で説明はありませんでしたが、Web MIDI APIを使って電子楽器とブラウザを接続するコードを以下に紹介させていただきます。</p>

<p></p><pre class="crayon-plain-tag">// 電子楽器と接続
navigator.requestMIDIAccess({sysex:true}).then(successCallback, errorCallback);
function successCallback(access){
　// 入力として利用可能な電子楽器のリストをConsoleに出力
　var inputs=access.inputs()
  console.log(inputs);

　// 入力として利用可能なindex=0の電子楽器から受信したMIDI MessageをConsoleに出力
  inputs[0].onmidimessage=function(event) {
    console.log(event.data);
  }

　// 出力として利用可能な電子楽器リストをConsoleに出力
  var outputs=access.outputs()
  console.log(outputs);

　// 出力として利用可能なindex=0の電子楽器にMIDI Messageを送信
  // A4(ラ：440hz、MIDI Key番号：0x45(69))を最大音量(7F(127)で発音させる例)
  outputs[0].send([0x90, 0x45, 0x7f]);
}
function errorCallback(msg) {
  // 何らかの問題で電子楽器との接続ができなかった場合、Consoleにエラーメッセージを出力
  console.log(msg);
}</pre><p></p>

<p>※JavaScriptでの書式になります。 .then()に関して、書式はDartとJavaScriptで同じですが、Dartでは Futureという並列処理デザインパターン、一方JavaScriptではPromiseという並列処理デザインパターンですので、内容は正確にいうと異なりますのでご注意ください。</p>

<p>次に、WebRTCの接続についてです。WebRTCは、RealtimeにPeer to PeerでAudio、Video、Dataの3種類のStreamを使ったコミュニケションができるAPIです。接続には、PeerConnectionを使います。Soundtrapにてビデオチャットを行いながら音楽制作を行うためには、ビデオチャットを行うWebcam stream、音楽制作用に楽器のステレオ音声を送るStereo music streamが必要になります。</p>

<p><img src="/wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-11.06.21-AM.png" alt="WebRTC_connectionExample" width="540" class="aligncenter size-full wp-image-8689" style="border:1px solid #dddddd" srcset="/wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-11.06.21-AM.png 586w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-11.06.21-AM-300x146.png 300w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-11.06.21-AM-207x101.png 207w" sizes="(max-width: 586px) 100vw, 586px" /></p>

<p>ビットレートはそれぞれStereo music Streamが128Kbps、Webcam streamがVP8 HD 2Mbpsで、PeerConnectionを使ってStreamしています。</p>

<h3>5. Vocalの録音</h3>

<p>録音の最後はVocalです。これで曲のメイン素材の録音、作成が完成です。</p>

<div id="attachment_8892" style="width: 710px" class="wp-caption aligncenter">
<a href="http://youtu.be/PMH1vM-dSc0?t=23m30s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">
<img src="/wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-6.36.43-PM.png" alt="CaptureVocalByNexus5" width="540" class="aligncenter size-full wp-image-9150" style="border:1px solid #dddddd" />
</a>
<p class="wp-caption-text">Nexus 5を片手に会場で歌声を録音する様子</p>
</div>

<p>Vocalの録音はNexus 5(携帯電話)を使用して、getUserMedia()を使って録音を行います。実際に歌うのはセッションのオーディエンスです！！（私の声も聞こえるかもです）マイクではなく、携帯電話をマイク代わりにして、Soundtrapに直接録音を行います。</p>

<h3>6. Mix Down</h3>

<p>「マスタリング」とも呼ばれ、各パート毎に音量の調節、音程の音量調節(Equalizing)、また残響(Reverb、Echo)の調節を行うことで各パートの音のバランスをとり、ハーモニーを深め、そして際立たせます。</p>

<p>SoundtrapはCloud型の音楽制作Webアプリケーションですので、インターネットに接続できる環境があればどこからでも音楽制作に参加することができます。もちろん、Mix Downをすることも可能です。セッションでは、Keyboard を弾いていた場所(<a href="http://goo.gl/lzrbpf" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">GoogleさんのSan Francisco Office</a>内で、セッションは<a href="http://goo.gl/M8moUo" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Moscone West</a>です)でMix Downが行われました。</p>

<div id="attachment_8892" style="width: 710px" class="wp-caption aligncenter">
<img src="/wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-12.17.15-PM.png" alt="WebAudio_mixdown" width="574" height="322" class="aligncenter size-full wp-image-8730" style="border:1px solid #dddddd" srcset="/wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-12.17.15-PM.png 574w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-12.17.15-PM-300x168.png 300w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-11-at-12.17.15-PM-207x116.png 207w" sizes="(max-width: 574px) 100vw, 574px" />
<p class="wp-caption-text">SoundTrap上に各パートが録音された状態</p>
</div>

<p>その結果、Google I/Oのテーマ曲はこのように仕上がりました。（下の画像をクリックすると視聴できます）</p>

<div id="attachment_8892" style="width: 710px" class="wp-caption aligncenter">
<a href="http://youtu.be/PMH1vM-dSc0?t=34m55s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">
<img src="/wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-7.07.32-PM.png" alt="PlaySong" width="540" class="aligncenter size-full wp-image-9160" style="border:1px solid #dddddd" srcset="/wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-7.07.32-PM.png 640w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-7.07.32-PM-300x163.png 300w, /wp-content/uploads/2014/07/Screen-Shot-2014-07-25-at-7.07.32-PM-207x112.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
</a>
<p class="wp-caption-text">波形をWebGL表示した背景と共に再生されました</p>
</div>

<p>こちらは Soundtrap内に保存されている音源をそのまま視聴できます 。<a href="https://www.soundtrap.com/io2014" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">試聴する</a></p>

<h2>開発言語にDartを選択した3つの理由</h2>

<p><img src="/wp-content/uploads/2014/07/dart_logo.png" alt="dart_logo" width="387" height="181" class="aligncenter size-full wp-image-9189" style="border:1px solid #dddddd" srcset="/wp-content/uploads/2014/07/dart_logo.png 387w, /wp-content/uploads/2014/07/dart_logo-300x140.png 300w, /wp-content/uploads/2014/07/dart_logo-207x96.png 207w" sizes="(max-width: 387px) 100vw, 387px" /></p>

<p>冒頭に、Soundtrapの開発にDartが採用されたことに触れました。以下の3点が、Dartを選択した理由だそうです。</p>

<h3>親しみやすさ(Familiarity)</h3>

<p>Dartはとにかく簡単に学べるようにと考えられて作られいて、Class や単一継承にセミコロン、中括弧を使うところがJavaScriptや、Java、C++にとても似ているので開発者にはとても親しみやすい。</p>

<h3>拡張性(Scalability)</h3>

<p>Webアプリの開発はとても小さなスクリプトから開始し、それが成長して大規模で複雑なアプリになっていく。従って大規模になった時のことを考えると、スケールアップができる環境で開発を開始することが望まれる。DartではそれをLibrary、またPackageという形で実現している。</p>

<p>Soundtrapの開発は、これらのDartの拡張性によってアプリが大規模になった時でも、開発のスピード（生産性）を落とすことなく進めることができたそうです。</p>

<h3>生産性(Productivity)</h3>

<p>Dartで開発する時は、Dart Editorを使うことができます。このEditorではコードを静的監視しているので生産性がとても高いです。例えば、静的監視されているので、アプリを動作させなくても、Unitテストを走らせなくても構文エラーをリアルタイムに知ることができるのできます。つまりDart Editorは、世の中にある熟れたIDEと同じような機能が搭載されているツールになっているので、不自由はなく、生産性高く進めることが可能です。</p>

<h2>まとめ</h2>

<p>Soundtrapは、OpenWeb技術であるMedia Capture、Audio Processiong、Real-time CommunicationのAPIの紹介にはとてもよいアプリケーションです。今回はChrome上で動作させて紹介しましたが、これらの技術はOpenWeb技術ですので、デスクトップ、モバイル環境にある別のブラウザでも動作させることが可能です（可能になるでしょう）。また、これらの技術を使うことのできる世の中のデバイス数は、以下の通りです。</p>

<ul>
  <li><B>Web Audio</b> 20億のデバイス（10億がモバイル）</li>
  <li><b>WebRTC</b> 15億のデバイス（3億がモバイル）</li>
</ul>

<p>そして Android LのWebViewではChrome V36相当になりますので、Web Audio、WebRTCがほぼすべてのAPIをサポートされた形で使えるようになります。30日でのアクティブユーザ数が10億のAndroidという環境ですので、ものすごく多くのユーザーに対して、これらを使ったアプリケーションの提供が可能になるため、そのインパクトは絶大です。</p>

<h2>Q&amp;Aで質問が出た項目</h2>

<h3>Q. Android LでのAudioのLatencyについて教えてください。</h3>

<p><b>A.</b> 数値の約束はできないが、改善に向けて真剣に取り組んでいる。ICS、JB、Kitkatで20msまでLatencyを短縮することはできた。しかしながら、我々としてもまだまだ満足はしていないので改善していくだろう。</p>

<h3>Q. MIDIのサポートについてどこまで進んでいるのか教えてください。</h3>

<p><b>A.</b> Web MIDI APIはOpenWebStandardとして標準化が始まったばかりで、Chromeは先行して実装を行った。次期、またはその次のVersionでは全ての機能の実装を行い、さらにFlagの設定なしでの動作させる予定です。セッション内でSoundtrapで利用しましたが、もちろんセッション内だけなく、Soundtrap内ではMIDIの接続も利用することが可能です。<br>Chrome以外のブラウザでのサポートに関しては、現状様子見を行っています</p>

<h3>Q. Mix Downはクライアントサイドで行っているのか、サーバーサイドで行っているのか教えてください。</h3>

<p><b>A.</b> 音源はクラウド上のサーバー側にあって、再生をクライアントで行っています。サーバサイドはJavaとScalaで利用可能なPlay Frameworkを使っています。クライアント側で再生する時は、サーバー側でMix DownしたMP3ファイルを作成し、それをSoundtrapというクライアントアプリ側で再生をするという仕組みになっています。</p>

<h2>セッションを終えて感じたこと</h2>

<p>Before Web Audio/MIDIの時代では、DAW（音楽制作用ソフトウェア）を購入し、Audio I/F、キーボード、マイク等のハードウェアを揃えながら満足できる音楽制作の環境を整えるまでには、いささか道のりが長く時間がかかるのが常識で、またそこを楽しむこともありました。</p>

<p>しかし、Webブラウザで、デスクトップはもちろん、モバイルデバイス上での制作、さらには遠隔地とつないで、誰でも手軽に音楽制作に手を伸ばすことのできる時代（味見も含めて）なのだなと改めて感じました。制作はもちろんですが、ツールの作成、エフェクトの作成等、少し頑張れば、かゆいところに手の届くいわゆるオレシステムを作り上げることもそこまでハードルは高くないと思います。</p>

<p>今やアマチュアバンドとはいってもホームページを持ち、そこには自ら制作した楽曲、さらに自らで制作したであろう、とはいえクロリティの高いプロモーションビデオまでも揃えて公開する時代。昔はインスピレーションを得たらその場でフレーズやパターンの作成ができ、モバイルできる音楽制作専用ハードが流行した時もありました。</p>

<p>これからはインスピレーションを得たらポケットからさっとモバイルな汎用デバイスを取り出し、ブラウザを立上げDAWのURLに接続をし、その場でフレーズのみならず全体の流れを録音し楽曲にまとめることも容易になるでしょう。そして、遠隔にいる友人にバッキング、Mix Downしてもらい、その場でプロモーションビデオまで制作する一連の流れを即興でできてしまう、なんていうアマチュアでもプロ顔負けの音楽制作環境を持てる、素晴らしい時代が確実に来るだろうと感じました。同時に、これらの音楽制作に欠かせない技術と他のOpenWeb技術を連携させることでどのような新しい表現方法、また価値、文化が生まれるのかワクワクを膨らませてきた次第です。</p>

<p>W3Cの一員として標準化を進めているWeb MIDI API。今回は少しだけ登場し、スライドとしての説明はありませんでしたが、音楽を制作をする上ではコアになる技術です。標準化までこぎつけられるように強く推進をしていかねばとも感じました。</p>

<h2>紹介されたURL等</h2>

<ul>
  <li><a href="https://www.soundtrap.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Soundtrap</a>：デモで使われたOpenWeb上に構築された音楽制作環境</li>
  <li><a href="http://www.html5rocks.com/en/tutorials/webrtc/basics/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Getting Started with WebRTC</a>：WebRTCのチュートリアル（英語）</li>
  <li><a href="http://www.html5rocks.com/ja/tutorials/webaudio/intro/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Getting Started with the Web Audio API</a>：Web Audio APIのチュートリアル(日本語)</li>
  <li><a href="https://www.dartlang.org/docs/tutorials/get-started/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Get Started with Dart</a>：Dartのチュートリアル（英語）</li>
</ul>
]]></content:encoded>
		
		<series:name><![CDATA[Google I/O 2014 特集]]></series:name>
	</item>
		<item>
		<title>ブラウザとMIDIの出会いが拓くWebとMusicの新しい世界「HTML5 Conference 2013」</title>
		<link>/miyuki-baba/3758/</link>
		<pubDate>Wed, 08 Jan 2014 02:00:43 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[HTML5 Conference 2013]]></category>
		<category><![CDATA[MIDI]]></category>

		<guid isPermaLink="false">/?p=3758</guid>
		<description><![CDATA[連載： HTML5 Conference 2013レポート (20)Web MIDI APIはWeb Audio APIと並ぶ音楽系のAPIです。あまり馴染みのないMIDIですが、Web MIDI APIを使うことであら...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conference-2013-2/" class="series-160" title="HTML5 Conference 2013レポート" data-wpel-link="internal">HTML5 Conference 2013レポート</a> (20)</div><p>Web MIDI APIはWeb Audio APIと並ぶ音楽系のAPIです。あまり馴染みのないMIDIですが、Web MIDI APIを使うことであらゆる電子楽器とブラウザの接続が簡単にでき電子楽器からブラウザ上のアプリケーションを操作、また逆に、ブラウザ上のアプリケーションから電子楽器を操作することが可能です。</p>

<p>「HTML5 Conference 2013」では、MIDIの基礎、Web MIDI APIの概要、また10月末に発表された音声合成技術について、AMEI Web MIDI WG/ヤマハ株式会社の河合良哉氏が紹介。ハードウェアに搭載したLSI「NSX-1」を1ボードに収めた「eVY1 SHIELD」を使ったデモアプリケーションや、WebとMusicの世界について語られました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/DSC_0188.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/DSC_0188.jpg" alt="DSC_0188" width="700" height="360" class="aligncenter size-full wp-image-4271" srcset="/wp-content/uploads/2014/01/DSC_0188.jpg 640w, /wp-content/uploads/2014/01/DSC_0188-300x154.jpg 300w, /wp-content/uploads/2014/01/DSC_0188-207x106.jpg 207w" sizes="(max-width: 700px) 100vw, 700px" /></a></p>

<h2>MIDIの基礎と、Web MIDI APIの概要</h2>

<p>現在、MIDI規格の標準化・企画の策定・管理・普及活動（MIDI検定試験）を行っているのは、一般社団法人音楽電子事業協会AMEI（Association of music electronics industry）。2013年9月にWeb MIDI Working Groupを発足させ、W3Cに加盟し、Web MIDI APIの規格策定・普及活動を開始しました。</p>

<p>Web MIDI APIは、あらゆる電子楽器とブラウザの接続が簡単にできる音楽系API。電子楽器からブラウザ上のアプリケーションを操作でき、さらにブラウザ上のアプリケーションから電子楽器を操作することも可能です。</p>

<p>MIDI（Musical Instrument Digital Interface）とは、電子楽器同士を接続するインターフェースであり、31.25Kbpsの非同期方式シリアル通信とデータの単位は8bit（1byte）を用いています。端子はIN、OUT、THRUの3種類があり、端子でつながっている複数の楽器を同時に制御することが可能。また、16チャンネルを持っているので、16個の音色を同時に操ることができます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/767653c49924bad8d42d808b46d12cc1.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/767653c49924bad8d42d808b46d12cc1.jpg" alt="ブラウサ-とmidiの出会い" width="635" height="454" class="aligncenter size-full wp-image-4273" srcset="/wp-content/uploads/2014/01/767653c49924bad8d42d808b46d12cc1.jpg 635w, /wp-content/uploads/2014/01/767653c49924bad8d42d808b46d12cc1-300x214.jpg 300w, /wp-content/uploads/2014/01/767653c49924bad8d42d808b46d12cc1-207x147.jpg 207w" sizes="(max-width: 635px) 100vw, 635px" /></a></p>

<p>MIDIにはチャンネルメッセージ・システムメッセージの2種類があります。チャンネルメッセージでは、チャンネルごとに独立した演奏情報を伝え、システムメッセージでは全体をコントロールする情報を伝えます。システムメッセージには様々なものがありますが、NoteOn（音を発生）、NoteOff（音を止める）、ProgramChange（音色を変える）、SystemExclusive（複数の機器をコントロール）の4つを使うだけでもMIDIをかなり楽しめるでしょう。これらのメッセージでさまざまな表現の可能性を持つのがMIDIです。</p>

<h2>注目を集めるWeb MIDI API</h2>

<p>MIDIのメリットはいろいろありますが、まず挙げられるのはmp3のようなバイナリデータと違ってデータ量が少ないところ。NoteOn（音を発生）、NoteOff（音を止める）など信号だけをやりとりするため、1分間あたりのデータ量は10kb以下。またMIDIでは接続した機器のON/OFFに強弱がつけられる。さらに「今から1分後にある音を鳴らす」など、シーケンスを書けるところも大きな魅力です。</p>

<p>MIDIのユースケースには音楽用途とそれ以外があります。音楽用途としては、電子機器の複数台コントロール・DAW（Cubase、Gragebandなど）・カラオケ、演奏記録アプリ・遠隔地ライブ配信など。カラオケはmp3配信も増えてきましたが、まだまだMIDIも多い。またヤマハ株式会社では、先日カリフォルニアのホールにいるエルトン・ジョンの歌声を銀座・韓国・ロシア・ブラジルに配信し、遠隔地と同期させる遠隔地ライブ配信を実施したばかり。音楽以外では、Show（MSC：MIDI Show Control）が興味深い。Universal StudioのアトラクションWater WorldやBellagioの噴水のコントロールにMIDIが使われています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/085831a70d75bce08896a8215121a509.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/085831a70d75bce08896a8215121a509.jpg" alt="ユースケース" width="634" height="463" class="aligncenter size-full wp-image-4275" srcset="/wp-content/uploads/2014/01/085831a70d75bce08896a8215121a509.jpg 634w, /wp-content/uploads/2014/01/085831a70d75bce08896a8215121a509-300x219.jpg 300w, /wp-content/uploads/2014/01/085831a70d75bce08896a8215121a509-207x151.jpg 207w" sizes="(max-width: 634px) 100vw, 634px" /></a></p>

<p>最近ネットワークとの融合で大きな可能性を秘めているMIDIですが、10月末にGoogleと共同でWeb MIDI APIのハッカソンが行われました。優秀賞には、TENORI-ON（16&#215;16のマトリクスボタンで、音楽知識がなくても直感的に音楽を作り奏でられる手のひら大のデバイス）から発生するデータをMIDI信号に解析し、絵を割り当てるアプリVJ（Video Jockey）が選ばれています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/9e2fe3ec97af60ab66585e96c62d804f1.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/9e2fe3ec97af60ab66585e96c62d804f1.jpg" alt="ハッカソン" width="637" height="462" class="aligncenter size-full wp-image-4279" srcset="/wp-content/uploads/2014/01/9e2fe3ec97af60ab66585e96c62d804f1.jpg 637w, /wp-content/uploads/2014/01/9e2fe3ec97af60ab66585e96c62d804f1-300x217.jpg 300w, /wp-content/uploads/2014/01/9e2fe3ec97af60ab66585e96c62d804f1-207x150.jpg 207w" sizes="(max-width: 637px) 100vw, 637px" /></a></p>

<p>Web MIDI APIでは、他のAPIとのコラボレーションも容易になります。ハッカソン会場では、カメラを使ったGet user mediaとコラボレーションしたアプリもいくつか発表され、注目を集めています。</p>

<p>アプリ作成に関する情報としては、2013年11月末にWeb MIDI APIはアップデートされたばかり。以前より、いく分短いソースコードで表現することが可能になりました。ブラウザは現在Chromeに対応。FireFox、Opera、SafariではWeb MIDI API仕様が容易されています。IEは対応されていませんが、Microsoft connectによると「IE11には載せないが今後は載せたい」と前向きの様子です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/91d805ddac1df8943af3c0512c7b4579.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/91d805ddac1df8943af3c0512c7b4579.jpg" alt="ソースコード" width="632" height="469" class="aligncenter size-full wp-image-4277" srcset="/wp-content/uploads/2014/01/91d805ddac1df8943af3c0512c7b4579.jpg 632w, /wp-content/uploads/2014/01/91d805ddac1df8943af3c0512c7b4579-300x222.jpg 300w, /wp-content/uploads/2014/01/91d805ddac1df8943af3c0512c7b4579-207x153.jpg 207w" sizes="(max-width: 632px) 100vw, 632px" /></a></p>

<p>Web MIDI APIを使ったアプリに挑戦してみたい人たちのために、Web MIDI API Wrapperが公開されています。現在sendのみですが、これからreceiveも対応する予定とのこと。MIDIでつながる様々なデバイスをコントロールするアプリの楽しさを、多くの人達に楽しんでほしい、と河合氏はセッションを締めくくりました。</p>

<p><DIV align=right></p>

<p style="padding-top: 16px; line-height: 1.55; color: #60aa2a;">（レポート：畑毛あゆみ／撮影：藤川友子）</p>

<p></div></p>

<p>【講演資料・セッション映像】</p>

<iframe src="http://www.slideshare.net/slideshow/embed_code/28761481?rel=0" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen> </iframe>

<div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/ryoyakawai/midiwebmusic" title="ブラウザとmidiの出会いが拓くwebとmusicの新しい世界" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">ブラウザとmidiの出会いが拓くwebとmusicの新しい世界</a> </strong> from <strong><a href="http://www.slideshare.net/ryoyakawai" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Kawai Ryoya</a></strong> </div>

<iframe width="560" height="315" src="//www.youtube.com/embed/ACM1BAvJYWQ" frameborder="0" allowfullscreen></iframe>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2013レポート]]></series:name>
	</item>
	</channel>
</rss>
