我正在使用jwegener's recorder.js进行录音。我很好奇是否可以在录音机运行时从javascript中轮询闪光灯以获得音频的“帧”来构建波形。
在我想象的伪代码中:
function record() {
Recorder.Record();
setInterval(function(){
Recorder.fetchCurrentAudioSnapshot();
}, 50);
}
理想情况下,这会给我一个可以用来绘制波形的数值。
感谢您提出的任何想法。
答案 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);
这些更改让我可以动态创建波形。希望这会对其他人有所帮助。