私はそれを考え出した。
私が最初にしたことは、サンプルの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);
これらの変更により、その場で波形を作成することができました。これが他の誰かに役立つことを願っています。