簡體   English   中英

Web Audio API-LFO緩沖音高

[英]Web audio api - LFO on buffer pitch

是否可以在緩沖區的聲音播放率值上添加lfo,類似於您對振盪器頻率的設置?

我嘗試創建一個振盪器節點,將頻率值設置為2,將其連接到增益節點,將增益值設置為1000,然后將增益節點連接到緩沖聲音的播放速率,但沒有任何效果。

我的代碼:

function Sound(path) {
    var that = this;
    that.buffer = null;
    that.path = path
    var request = new XMLHttpRequest();
  request.open('GET', that.path, true);
  request.responseType = 'arraybuffer';
    request.onload = function() {
    ac.decodeAudioData(request.response, function(buffer) {
      that.buffer = buffer;
    });
  }
  request.send();
}

Sound.prototype.play = function(a,b) {
        var lfo = ac.createOscillator();
        lfo.frequency.value = 0.5
        var lfoAmp = ac.createGain();
        lfoAmp.gain.value = 1000
        var gain = ac.createGain();
        gain.gain.value = a;
        var playSound = ac.createBufferSource();
        playSound.playbackRate.value = b;
        lfo.connect(lfoAmp);
        lfoAmp.connect(playSound.playbackRate);
        playSound.buffer = this.buffer;
        playSound.loop = true;
        playSound.connect(gain);
        gain.connect(ac.destination);
        lfo.start(0);
        playSound.start(0);
}

您的示例缺少很多上下文,因此很難調試(例如b參數是什么?)。如果可以鏈接到實際示例,我可以進行更詳細的介紹。

用LFO大致按照您的描述來驅動播放速率是絕對可能的-但振盪器的輸出將在[-1,1]之間變化,因此lfoAmp的輸出將在[-1000,1000]之間變化。 然后會將其與playound.playbackRate相加,因此它將在[-1000 + b,1000 + b]之間變化。 那是一個很大的乘數-實際上,當前的實現將playbackRate限制在[0,4]之類(關於確切范圍並不肯定-請參見https://github.com/WebAudio/web-audio-api/issues/391#issuecomment -61673716 。)

1)您可能想要在[0.5,2]或類似的值之間改變播放率; 混疊和諧波使拉伸效果比聽起來更難看。

2)更改.detune而不是.playbackRate可能會容易得多,當然也更具音樂性。 以[-1200,1200]的幅度變化,以產生一個八度的上移,一個八度的下移。

(實際上,目前將playingRate指定為k速率,這會稍微破壞這種情況,但是上面有一個錯誤: https : //github.com/WebAudio/web-audio-api/issues/55 。)

暫無
暫無

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

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