【问题标题】:apply effects to a recorded audio using web audio api使用网络音频 api 将效果应用于录制的音频
【发布时间】:2014-08-16 07:01:25
【问题描述】:

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

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 尤其是网络音频非常陌生

【问题讨论】:

    标签: javascript html5-audio web-audio-api


    【解决方案1】:

    好的。所以演示创建了这样一个图表。

    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
    

    【讨论】:

    • 好的。我刚刚意识到您有一个尚未定义的名为wetGain 的东西。怎么联系的?
    【解决方案2】:

    如果您想在录制后对音频应用效果,可以使用Web Audio 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而不是输入或“干”信号。

    【讨论】:

      猜你喜欢
      • 2014-02-09
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多