[英]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.