






日本アンドロイドの会の各地の支部活動のブースと企業ブースが半々くらいの感じですかね。なんだかよくわからないけど九州方面の人が島原そうめんを配っていたのでもらってきました。 それはそれとして、このところIoT IoTってあまりに聞き過ぎて、最近ちょっとあれなんかこの言葉古臭いんじゃね? とか思うようになってしまいました。こういう言葉の運命のようなものだと思うのだけど、多分こういう変化って一気にくるんじゃないかなぁ。そろそろ危険なのかもね。
(()=>{ var r=new Float32Array(1023); for(var i=0;i<512;++i){ var v=((i/512)*128|0)/128; r[511+i]=v; r[511-i]=-v; } return r; })()パラメータは"Bits"の1つだけで 2ビットから8ビットまで可変できますが整数に限らず少数でも構いません。通常のやり方だとこのパラメータによって任意の段数のカーブを作り直すのですが、ここでは少し違うやり方で、信号の振幅の方を調整してカーブの一部のみを使う事で任意の段数に変換しています。
W3C サイトで公開されている Web Audio API のワーキングドラフトは2年前から変わらず、2015年12月版のままなんですが、GitHub に置かれているエディターズドラフトは2017年も色々と変更が加わっています。
完全には追い切れていませんが、どんな変更があったのかざっと紹介したいと思います。なお昨年中に行われた変更は昨年の記事、「2016年、Web Audio API はどう変わったのか?」の方にありますので併せて見て頂ければ日本語訳を作った2015年12月以降の様子がだいたいわかると思います。
これが一番の大物で、去年の時点で AudioWorker 改め AudioWorklet の設計が始まっていましたが、deprecate になったScriptProcessor で新たに何かを作るのもいまいち気が進まない事もあり、ブラウザに実装されるのを心待ちにしてやきもきしていた人もいるのではないでしょうか。
設計が進む中で、AudioWorkletNode と AudioWorkletProcessor 間の通信方法が、当初 sendData() / ondata ハンドラーだったのが MessagePort に変更されたりしたようです。
つい最近ですが Chrome 64 でフラグ付きですが実装されていますので、遂に実際に動作を試す事ができるようになりました。
エディターズドラフト : AudioWorkletAudioContext に getOutputTimestamp() というメソッド、およびbaseLatency、outputLatencyというプロパティが追加され、これにより JavaScript 上の処理から実際に音として出力されるまでの時間などが取れるようになります。この辺を使うと、音とグラフィックスのタイミングをびっちり同期させたりする事ができそうですね。
getOutputTimestamp()で取れるのは:
AudioTimestamp { double contextTime; DOMHighResTimeStamp performanceTime; }という形式で、
です。
また、プロパティの方は、AudioDestinationNode がデータを受け取ってからオーディオサブシステムに渡すまでのレイテンシーが baseLatency、オーディオサブシステムがデータを渡してから音として出力されるまでのレイテンシーが outputLatency となります。outputLatency はプラットフォーム、ハードウェア依存の話になってしまうので OS 毎にざっくりした値が設定されるのではないかと思いますが今の所まだ仕様だけで実装はされていません。
AudioContext を作成する際に、
var audioCtx = new AudioContext({ latencyHint: 'interactive', sampleRate: 44100, });
というような感じで WebAudioAPI の内部のサンプルレートが指定できるようになりました。またもうひとつのオプションである、"playbackCategory" は "latencyHint" に名前が変わっています。
実装は今の所まだ対応していないようですが、指定されたサンプルレートがオーディオデバイスのサンプルレートと異なる場合は内部でリサンプルが行われる事になっているようです。
今まであった MediaStreamAudioSourceNode に加えて MediaStreamTrackAudioSourceNode が追加されました。名前長いよ。
これは MediaStream 中の1つのオーディオトラックを指定して Web Audio API に取り込むためのノードになります。
私も動作を確認していないのですが、これは WebRTC のピアコネクションから送られてくるストリームに複数のオーディオストリームトラックが含まれている時などに id で指定して1本のオーディオを取り込む場合等に使うものだと思います。
今までの仕様で既に StereoPannerNode のように信号が2チャンネルステレオでないと意味を成さないノード等もありました。
各ノードの種類に応じて channelCount、channelCountMode、channelInterpretation の各パラメータの扱いの詳細が説明されています。例えば StereoPannerNode では channelCount は2以上に書き換えられず、channelCountMode は"max"に設定できません。また channelSplitter では channelInterpretation を"discrete" 以外には設定できません。
dictionary AudioNodeOptions { unsigned long channelCount; ChannelCountMode channelCountMode; ChannelInterpretation channelInterpretation; };
これらは(new を使って)ノードを作成する際にオプションとして渡す事ができます。
幾つかのパラメータで Float32Array しか受け付けなかったものが通常の数値の配列で OK になっているものがあります。
詳細な説明がどんどん増えていて全部を読むのはちょっと大変になってきていますが、他にも細かい所に変更は色々入っていると思います。
W3Cにあるワーキングドラフトがかなり置いて行かれてる感が強まってきましたので、そろそろワーキングドラフトに反映して欲しい所ですかね...
input[type=range] { -webkit-appearance:none; background:#000; height:24px; width:240px; border-radius:8px; } input[type=range]::-webkit-slider-thumb{ -webkit-appearance:none; background:#f00; height:20px; width:20px; border-radius:50%; } input[type=range]::-ms-tooltip{ display:none; } input[type=range]::-moz-range-track{ height:0; } input[type=range]::-moz-range-thumb{ background:#f00; height:20px; width:20px; border:none; border-radius:50%; }
画像 | ![]() |
実際のタグ |
5V.This pin outputs a regulated 5V from the regulator on the board. The board can be supplied with power either from the DC power jack (7 - 12V), the USB connector (5V), or the VIN pin of the board (7-12V). Supplying voltage via the 5V or 3.3V pins bypasses the regulator, and can damage your board. We don't advise it.という事でどうやらおすすめされていない。 気になる点としてはレギュレータの NCP1117 の出力側にだけ電圧をかけちゃう事かなぁ、と思ったけどよく考えると DC ジャックを繋がずに USB で駆動している状態と同じじゃないか。これで壊れるなら USB 電源で動かしているだけで壊れるって。という事で先の公式の文言はどうやら、ここに変な電圧をかけるとボードが一発で駄目になるからおすすめしない、という意味での注意ではないかと解釈するのが正しそうだ。そうだよね? となると、そもそもレギュレータの出力端子にだけ電圧をかけてぶっ壊れるという件に対しては大丈夫なのか? という疑問があるが、これはレギュレータ NCP1117 のデータシートに答えがある。
Protection Diodesだそうだ。つまり電圧が出力端子>入力端子になっても保護ダイオードが内蔵されているので大丈夫だよ、と。 ふむ、という事で安心して 5V 端子から 5V を供給して動かす事にしよう。まあ、5V端子から給電している時にVINに変なものを繋いでるとまずそうだし、直結なので注意しないといけないというのは確かだけどね。 Arduino UNO Rev.3 回路図 Arduino UNO Rev.3 DOCUMENTATION NCP1117 Datasheet
The NCP1117 family has two internal low impedance diode paths that normally do not require protection when used in the typical regulator applications. The first path connects between Vout and Vin, and it can withstand a peak surge current of about 15 A. Normal cycling of Vin cannot generate a current surge of this magnitude.