Tue Nov 08 2016 06:48:00 GMT+0900 (JST)

React コードリーディング

  • プロジェクトの構成が複雑 → npm i 後のものなら(まだ)見やすい
  • ReactComponent には setStateforceUpdate しかメソッドがない
  • createClass では色々やっている
  • extends React.Component で作ったクラスもどっかのタイミングで createClass でやっているようなことをする必要があるはず
  • createElement でやってる?

Web Audio Test API

  • グラフ探索クエリ < GainNode < OscillatorNode のように書けるように検討
  • > デスティネーション側のノード
  • < ソース側のノード
  • GainNode ノードの名前
  • GainNode .gain オーディオパラメータ
  • GainNode [channelCount=2] 属性のフィルタリング
  • GainNode .gain [value=0.5] 属性のフィルタリング
  • > GainNode .gain [value=0.5] > GainNode

Mon Oct 31 2016 16:56:52 GMT+0900 (JST)

https://github.com/mohayonao/web-audio-sound-examples

カテゴリをつけた方が良い気がしてきた。

  • 単純に音がなるだけのもの (synth)
  • パターンをつかって演奏するもの (compose)
  • エフェクトとしてつかうもの (effect)

みたいな?

Sat Oct 29 2016 14:14:35 GMT+0900 (JST)

BiquadFilterNode と IIRFilterNode の getFrequencyResponse を実装した。

計算部分は共通にしてある。式の意味はさっぱり分からない。

function getFilterResponse(b, a, freq, mag, phase, sampleRate) {
  for (let i = 0, imax = freq.length; i < imax; i++) {
    const w0 = 2 * Math.PI * (freq[i] / sampleRate);
    const ca = compute(a, Math.cos, w0);
    const sa = compute(a, Math.sin, w0);
    const cb = compute(b, Math.cos, w0);
    const sb = compute(b, Math.sin, w0);

    mag[i]   = Math.sqrt((cb * cb + sb * sb) / (ca * ca + sa * sa));
    phase[i] =  Math.atan2(sa, ca) - Math.atan2(sb, cb);
  }
}

function compute(values, fn, w0) {
  let result = 0;

  for (let i = 0, imax = values.length; i < imax; i++) {
    result += values[i] * fn(w0 * i);
  }

  return result;
}