簡體   English   中英

如何影響特定 howler.js 聲音的音頻上下文

[英]how to affect audio context for a specific howler.js sound

我正在嘗試將一些音頻上下文效果插入到特定的嚎叫聲中,包括我自己的淡入淡出。 (我知道 howler 有淡入淡出功能,但我需要自己做)。 我知道如何淡化影響所有聲音的全局嘯叫,但我不明白如何影響我創建的特定嚎叫 object - 在本例中,我們將特定的嚎叫 object 稱為“測試”

    var test = new Howl ({
                src: ['url'],
        });

這已經過測試並且適用於在全球咆哮上做我自己的淡入淡出:

  Howler.masterGain.gain.setValueAtTime(1, Howler.ctx.currentTime);
  Howler.masterGain.gain.linearRampToValueAtTime(0, Howler.ctx.currentTime + 10);

然而,對於稱為“測試”的嚎叫 object,我不清楚我將如何只對那個嚎叫 object 做同樣的淡出?

在查看 howler.js 代碼后,我嘗試了以下所有以不同方式出現的錯誤:

  test.masterGain.gain.setValueAtTime(1, Howler.ctx.currentTime);
  test.masterGain.gain.linearRampToValueAtTime(0, Howler.ctx.currentTime + 10);

  test.gain.setValueAtTime(1, Howler.ctx.currentTime);
  test.gain.linearRampToValueAtTime(0, Howler.ctx.currentTime + 10);

  test._node.gain.setValueAtTime(1, Howler.ctx.currentTime);
  test._node.gain.linearRampToValueAtTime(0, Howler.ctx.currentTime + 10);

請原諒我對 howler 通常如何處理聲音、JS 和音頻上下文的誤解。 我不是專家,但正在嘗試。 我確定這不是訪問 object“測試”並對其進行淡入淡出的方法。 請注意,我仍然想使用 howler 來定義“測試”,包括加載聲音、播放、暫停等。我試圖從頭開始遠離用於“測試”的原始編碼音頻上下文。 現在,我只需要使用音頻上下文直接訪問“測試”音量。

先感謝您!

好的,所以這樣做的方法有點棘手,因為你必須篡改私有屬性,但我認為這應該不是什么大問題,因為你想做的事情(淡入/淡出)很簡單足夠的。

// Getting a ref to the sound object
const sound = Howl._sounds[0];

// Get gain node
const gainNode = sound._node;

// Fade out
gainNode.gain.setValueAtTime(1, Howler.ctx.currentTime);
gainNode.gain.linearRampToValueAtTime(0, Howler.ctx.currentTime + 10);

老實說,就這么簡單。 現在有趣的部分是做一些更復雜的技巧,比如將增益連接到另一個音頻環境。 這可以通過斷開增益節點與主增益節點的連接來完成。

gainNode.disconnect(Howler.masterGain);

// Now connect to another gain node connected to another audio context
gainNode.connect(anotherGainNode);

這應該足以讓你能夠實現你想要/需要的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM