我想創建等級「渠道」,父母獲得的渠道將限制孩子的收益。Web音頻增益節點可以控制其他增益節點嗎?
因此,例如,我希望在孩子身上播放的音量有0.1
音量。
var child = context.createGain();
var parent = context.createGain();
parent.gain.value = 0.1;
child.gain.value = 1.0;
child.connect(parent);
我想創建等級「渠道」,父母獲得的渠道將限制孩子的收益。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
恆定的增益變化與其他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>
是的,您可以按照您的描述連續鏈接增益節點。請注意,在您的示例中這不是「限制」效應 - 它是乘法的。 (如果parent.gain.value爲2,最終結果將爲.2倍增益。)
該死的,我現在必須重寫我的一半應用程序。我動態地創建振盪器,通過增益提供給他們,然後每2-3個增益都會經歷一個分組增益,最後所有分組增益都會達到一個主增益。難怪,在4-5個振盪器之後,我在揚聲器上發生了大規模超速。現在我每次改變振盪器的數量都必須進行一次轉換。 –
好吧,他們沒有正常化,所以很確定,如果你將多個振盪器混合在一起,你會想要降低增益。你也可以使用壓縮器來做到這一點;您也可以將增益放在所有振盪器上。 – cwilso