Recorder.js单数据点

时间:2012-11-02 14:51:11

标签: javascript flash

我正在使用jwegener's recorder.js进行录音。我很好奇是否可以在录音机运行时从javascript中轮询闪光灯以获得音频的“帧”来构建波形。

在我想象的伪代码中:

function record() {
    Recorder.Record();

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

理想情况下,这会给我一个可以用来绘制波形的数值。

感谢您提出的任何想法。

1 个答案:

答案 0 :(得分: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);

这些更改让我可以动态创建波形。希望这会对其他人有所帮助。