1

オーディオ周波数を取得するスクリプトがあります。その周波数を曲の正確な時間と関連付けたいと思います。webkitAudioContext の currentTime プロパティを取得できますが、曲の開始前にサウンドをバッファに保存するときに時間をカウントし始めるため、これは正確ではありません。これは私のコードです:

var context = new webkitAudioContext();

...

function drawSpectrogram(array) {
    // copy the current canvas onto the temp canvas
    var canvas = document.getElementById("canvas");

    tempCtx.drawImage(canvas, 0, 0, 800, 512);
    // iterate over the elements from the array
    for (var i = 0; i < array.length; i++) {
        // draw each pixel with the specific color
        var value = array[i];
        frequency = frequency + value + ";";
        time = time + Math.round((context.currentTime) * 1000000) / 1000000 + ";";               
        ctx.fillStyle = hot.getColor(value).hex();
        // draw the line at the right side of the canvas
        ctx.fillRect(800 - 1, 512 - i, 1, 1);
    }

}

ありがとうございました!

4

2 に答える 2

2

currentTimeプレイを開始する準備が整う直前の値を保存し、その時間値を「ゼロ時間」マーカーとして使用します。音楽が再生されている時間を知りたいときはいつでも、値からその時間値 (セットアップにかかった時間を示します) を引きcurrentTimeます。

var context = new webkitAudioContext();

// load media, place in buffer, etc...

var startTime = context.currentTime; // everything up to now has been setup

// begin playing...

var currentPlayingTime = context.currentTime - startTime;

context.currentTime - startTime曲が実際に再生されている時間を調べるために使用します。

于 2013-04-25T14:52:53.920 に答える
1

あなたが何をしようとしているのかよくわかりませんが、High Resolution Time API を見てみたいかもしれません: http://www.w3.org/TR/hr-time/

関心のあるバッファで .noteOn() または .start() を呼び出すと同時に現在の時刻を取得し、DrawSpectrogram 関数で必要なことを実行するために経過した時間を決定できます。

于 2013-04-25T14:35:28.647 に答える