2015-08-18 64 views
0

我正在尋找一種方法來創建自定義音頻節點,並能夠調製像本機AudioNode一樣的AudioParams。即LFO.connect。(gainNode.gain)。在我的情況下,我想創建一個CrossFader節點(A,B),並能夠使用一個OscillatorNode來調整它在A,B之間的混合。自定義音頻節點自動化

我有這樣的功能,但非自動化的起點:

function crossFade(val, max, inputA, inputB) { 
    var x = parseInt(val)/parseInt(max), 
     gain1 = Math.cos(x * 0.5 * Math.PI), 
     gain2 = Math.cos((1.0 - x) * 0.5 * Math.PI); 

    inputA.gain.value = gain1; 
    inputB.gain.value = gain2; 
} 

感謝

回答

1

我想你想是這樣的:

function CrossFade(){ 
    this.inputA = context.createGain(); 
    this.inputB = context.createGain(); 
    this.fade = function(val, max) { 
     var x = parseInt(val)/parseInt(max), 
      gain1 = Math.cos(x * 0.5 * Math.PI), 
      gain2 = Math.cos((1.0 - x) * 0.5 * Math.PI); 

     inputA.gain.value = gain1; 
     inputB.gain.value = gain2; 
    } 
} 

這樣的情況下,你做var c = new CrossFade()你可以將你的曲目連接到c.inputA或c.inputB。然後,您可以自由地將您的調製器連接到這些音頻節點(如果您認爲合適的話)(如果您希望使用單個振盪器作爲兩個輸入的調製器,則可能必須使用腳本處理器節點來反轉振盪器的相位立刻)。

(請注意,你應該把淡變的方法的原型,但我在這裏用的這個,語法簡潔。)

0

一種可能的方式來自動交叉漸變。創建由線性斜坡組成的緩衝區源。創建兩個WaveShaperNodes,其中曲線與您的Math.cos公式相匹配。將緩衝源連接到每個WaveShaperNode,並將每個WaveShaperNode的輸出連接到要自動執行的增益節點。在想要啓動交叉漸變器的時間點啓動源節點。

我認爲這會做你想做的。