使用网络音频API将效果应用于录制的音频

时间:2014-08-06 06:30:04

标签: javascript html5-audio web-audio

我正在使用网络音频演示中的录制语音演示。无论如何,我想在完成录制后为获得的音频添加效果。 这是我的效果:

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非常新,特别是对于网络音频

2 个答案:

答案 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而不是输入,或将"干"信号。