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

在我想象的伪代码中:

function record() {
    Recorder.Record();

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


理想情况下,这将为我提供一个可用于绘制波形的数值。

感谢您提供的任何想法。

最佳答案

我想到了。

我所做的第一件事是将示例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);


这些变化使我可以动态创建波形。希望这会帮助其他人。

关于javascript - Recorder.js单个数据点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13197601/

10-11 19:55