2015-10-28 91 views
2

我想創建等級「渠道」,父母獲得的渠道將限制孩子的收益。Web音頻增益節點可以控制其他增益節點嗎?

因此,例如,我希望在孩子身上播放的音量有0.1音量。

var child = context.createGain(); 
var parent = context.createGain(); 
parent.gain.value = 0.1; 
child.gain.value = 1.0; 
child.connect(parent); 

回答

1

是的,音頻增益如所述那樣分級鏈接。

它將輸入音頻信號乘以增益屬性(可能隨時間變化),將結果複製到輸出。默認情況下,它會 取輸入,並通過將它傳遞到輸出不變,這 表示1

恆定的增益變化與其他AudioParams,增益參數代表映射 從時間(在座標系統的AudioContext.currentTime)爲 浮點值。輸入中的每個PCM音頻採樣是 乘以對應於該音頻採樣的特定時間 的增益參數值。該相乘值代表輸出的PCM音頻採樣 。

http://www.w3.org/TR/webaudio/#GainNode

下面是一個完整的例子。

<html> 
<body> 
<script type="text/javascript"> 

var AudioContext = window.AudioContext || window.webkitAudioContext; 
var context = new AudioContext(); 

var parentGain = context.createGain(); 
var childGain = context.createGain(); 

parentGain.gain.value = 0.1; 
childGain.gain.value = 1.0; 

childGain.connect(parentGain); 
parentGain.connect(context.destination); 

var bufferSize = 4096; 
var pinkNoise = (function() { 
    var b0, b1, b2, b3, b4, b5, b6; 
    b0 = b1 = b2 = b3 = b4 = b5 = b6 = 0.0; 
    var node = context.createScriptProcessor(bufferSize, 1, 1); 
    node.onaudioprocess = function(e) { 
     var output = e.outputBuffer.getChannelData(0); 
     for (var i = 0; i < bufferSize; i++) { 
      var white = Math.random() * 2 - 1; 
      b0 = 0.99886 * b0 + white * 0.0555179; 
      b1 = 0.99332 * b1 + white * 0.0750759; 
      b2 = 0.96900 * b2 + white * 0.1538520; 
      b3 = 0.86650 * b3 + white * 0.3104856; 
      b4 = 0.55000 * b4 + white * 0.5329522; 
      b5 = -0.7616 * b5 - white * 0.0168980; 
      output[i] = b0 + b1 + b2 + b3 + b4 + b5 + b6 + white * 0.5362; 
      output[i] *= 0.11; // (roughly) compensate for gain 
      b6 = white * 0.115926; 
     } 
    } 
    return node; 
})(); 

pinkNoise.connect(childGain); 

</script> 
</body> 
</html> 
1

是的,您可以按照您的描述連續鏈接增益節點。請注意,在您的示例中這不是「限制」效應 - 它是乘法的。 (如果parent.gain.value爲2,最終結果將爲.2倍增益。)

+0

該死的,我現在必須重寫我的一半應用程序。我動態地創建振盪器,通過增益提供給他們,然後每2-3個增益都會經歷一個分組增益,最後所有分組增益都會達到一個主增益。難怪,在4-5個振盪器之後,我在揚聲器上發生了大規模超速。現在我每次改變振盪器的數量都必須進行一次轉換。 –

+0

好吧,他們沒有正常化,所以很確定,如果你將多個振盪器混合在一起,你會想要降低增益。你也可以使用壓縮器來做到這一點;您也可以將增益放在所有振盪器上。 – cwilso