1

オーディオ録音にはjwegenerのrecorder.jsを使用しています。レコーダーの実行中にJavaScriptからフラッシュをポーリングして、オーディオの「フレーム」を取得して波形を作成できるかどうか興味があります。

私の想像した疑似コードでは:

function record() {
    Recorder.Record();

    setInterval(function(){
      Recorder.fetchCurrentAudioSnapshot();
    }, 50);
}

理想的には、波形をプロットするために使用できる数値が得られます。

あなたが与えることができるアイデアをありがとう。

4

1 に答える 1

2

私はそれを考え出した。

私が最初にしたことは、サンプルのjavascriptをオブジェクトに入れることでした。これが私が使用している記録機能です:

record: function() {
        this.data = [];
        this.poll = '';

        Recorder.record({
            start: function () {
                alert("recording starts now. press stop when youre done. and then play or upload if you want.");
            },
            progress: function (milliseconds) {
                document.getElementById("time").innerHTML = Voiceover.timecode(milliseconds);
            }
        });

        this.waveform = new Waveform({
            container: document.getElementById("voiceover_waveform"),
            interpolate: false
        });
        var ctx = this.waveform.context;

        var gradient = ctx.createLinearGradient(0, 0, 0, this.waveform.height);
        gradient.addColorStop(0.0, "#f60");
        gradient.addColorStop(1.0, "#ff1b00");
        this.waveform.innerColor = gradient;

        var i=0;

        this.poll = setInterval(function() {
            Voiceover.data.push(Recorder.PollAudioBuffer());
            Voiceover.waveform.update({
                data: Voiceover.data
            });
        }, 70);
    },

これにより、波形が初期化され、70msの間隔が設定されて、レコーダーがポーリングされて新しいデータポイントが取得され、波形にプロットされます。

recorder.js、次の関数を追加しました。

PollAudioBuffer: function() {
    try {
        var poll = this.flashInterface().pollAudioBuffer();

        console.log(poll);

        if(poll < 0.15) {
                            // Messing around with the math a bit to improve the effect. 
                            // The final result just has to be between 0 and 1.
            poll = Math.floor((Math.random()*1.5)+1)/10;
        }

        return poll;
    }
    catch(error) {
        console.log(error);
    }
},

次に、アクションスクリプトについて説明します。にRecorder.as、関数を追加しましpollAudioBuffer()たが、実際には少し名前が間違っています。

protected function pollAudioBuffer():Number
    {
        return (microphone.activityLevel*2)/100;
    }

addExternalInterfaceCallbacks()関数を機能させるには、コールバック参照をに追加する必要がありますRecorder.as

ExternalInterface.addCallback("pollAudioBuffer",this.pollAudioBuffer);

これらの変更により、その場で波形を作成することができました。これが他の誰かに役立つことを願っています。

于 2012-11-05T18:00:21.590 に答える