我正在使用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/