Hope is a Dream. Dream is a Hope.

非公開ブログは再開しました。

Web Audio API お勉強 その2

g200kgさんのサイトにオーディオ波形を表示するサンプルコードがありましたので、お勉強させていただきます。

Web Audio API 解説 - 12.アナライザーの使い方 | g200kg Music & Software

初期値

グラフ描画を周波数領域or時間領域のどちらですかのフラグ(mode)とソースを定義.   とりあえずここは流します.

// initial condition 
var mode = 0;
var src = null;

アナライザーの設定

きました。アナライザ。これがないとつまらない。
AudioContexのcreateAnalyser()メソッドを使って, アナライザオブジェクトを生成しています。
そして, デシベル範囲の初期値を 描画しているのが分かります。

// analyser
var analyser = audioctx.createAnalyser();
analyser.fftSize = 1024;
document.getElementById("min").value = analyser.minDecibels;
document.getElementById("max").value = analyser.maxDecibels;

キャンバスの設定

きました。キャンバス。これがないとつまらない。
キャンバスは初めてなので, 良くわからない.

なにやら、gradbaseとgradlineの二つの変数がある。
どちらもcreateLinearGradient()から生成されている。 引数で表される座標から得られる直線に沿って描く線形グラデーションを表す CanvasGradient オブジェクト

どうやらどちらも同じオブジェクトなので, UIで見た紫とオレンジのグラフのことかな。
f:id:hope_is_dream:20140417134110j:plain

// canvas前半
var ctx = document.getElementById("graph").getContext("2d");
var gradbase = ctx.createLinearGradient(0, 0, 0, 256);
gradbase.addColorStop(0, "rgb(20,22,20)");
gradbase.addColorStop(1, "rgb(20,20,200)");
// canvas後半
var gradline = [];
for(var i = 0; i < 256; ++i) {
    gradline[i] = ctx.createLinearGradient(0, 256 - i, 0, 256);
    var n = (i & 64) * 2;
    gradline[i].addColorStop(0, "rgb(255,0,0)");
    gradline[i].addColorStop(1, "rgb(255," + i + ",0)");
}