我正在使用网络音频演示中的录制语音演示。无论如何,我想在完成录制后为获得的音频添加效果。 这是我的效果:
function createDelay() {
var delayNode = null;
if (window.location.search.substring(1) == "webkit")
delayNode = audioContext.createDelay();
else
delayNode = audioContext.createDelay();
delayNode.delayTime.value = parseFloat( document.getElementById("dtime").value );
dtime = delayNode;
var gainNode = audioContext.createGain();
gainNode.gain.value = parseFloat( document.getElementById("dregen").value );
dregen = gainNode;
gainNode.connect( delayNode );
delayNode.connect( gainNode );
delayNode.connect( wetGain );
return delayNode;
}
这是我记录节点连接到目的地的成功函数:
function gotStream(stream) {
inputPoint = audioContext.createGain();
// Create an AudioNode from the stream.
realAudioInput = audioContext.createMediaStreamSource(stream);
audioInput = realAudioInput;
audioInput.connect(inputPoint);
analyserNode = audioContext.createAnalyser();
analyserNode.fftSize = 2048;
inputPoint.connect( analyserNode );
audioRecorder = new Recorder( inputPoint );
zeroGain = audioContext.createGain();
zeroGain.gain.value = 0.0;
inputPoint.connect( zeroGain );
zeroGain.connect( audioContext.destination );
updateAnalysers();
}
那么如何在录制后将效果连接到获得的音频文件?换句话说,如何在gotStream函数中连接湿增益?
我的问题可能看起来有点笨拙,但我对javascript非常新,特别是对于网络音频
答案 0 :(得分:0)
行。所以演示创建了这样一个图表。
realAudioInput -> inputPoint -> audioRecorder -> recorderJSNode -> destination
|| -> zeroGain -> destination
|| -> analyserNode
因此,如果您想将效果添加到录音中,则必须将其插入inputPoint
和' recorderJSNode'。
这样做的最佳方式就是这样。
var delayNode = createDelay();
inputPoint.connect( delayNode );
audioRecorder = new Recorder( delayNode );
而不仅仅是
audioRecorder = new Recorder( inputPoint );
所以你的图表看起来像这样。
realAudioInput -> inputPoint -> audioRecorder -> delayNode -> recorderJSNode -> destination
|| -> zeroGain -> destination
|| -> analyserNode
答案 1 :(得分:0)
如果您希望在 录制后将效果应用于音频 ,则可以使用网络音频API Offline Context。
//after the recording is finished
var offlineContext = new webkitOfflineAudioContext();
var source = offlineContext.createBufferSource();
source.buffer = buffer; //here you set the recording as the buffer
var delay = offlineContext.createDelay();
delay.delayTime.value = 0.2; // set the delay time
source.connect(delay);
delay.connect(offlineContext.destination);
//the success callback
offlineContext.onComplete = function(e){
//it returns the rendered buffer
var result = e.renderedBuffer;
};
offlineContext.startRendering(); // start the offline rendering process
由于您在问题中使用了Recorder.js,因此您可以使用recorder.getBuffer
方法将录制的音频设为Float32Array
。
但如果你想记录"湿"实时发出信号,您只需将Recorder
的来源设为DelayNode
而不是输入,或将"干"信号。