gpt4 book ai didi

javascript - Web 音频 api - 缓冲音高上的 LFO

转载 作者:行者123 更新时间:2023-11-30 16:45:07 25 4
gpt4 key购买 nike

是否可以向缓冲区声音播放速率值添加 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]。然后它会与 playsound.playbackRate 相加,因此它会在 [-1000+b, 1000+b] 之间变化。这是一个很大的乘数 - 事实上,当前的实现将 playbackRate 限制在 [0,4] 之类的东西(关于精确范围不是积极的 - 参见 https://github.com/WebAudio/web-audio-api/issues/391#issuecomment-61673716 。)

1) 您可能希望在 [0.5,2] 或类似值之间改变 playbackRate;混叠和谐波使拉伸(stretch)不仅仅是听起来很丑陋。

2) 改变 .detune 比改变 .playbackRate 可能更容易,当然也更具音乐性。以 [-1200,1200] 的幅度变化,向上移动一个 Octave ,向下移动一个 Octave 。

(事实上,playbackRate 目前被指定为 k-rate,这会稍微破坏这个场景,但它有一个错误:https://github.com/WebAudio/web-audio-api/issues/55。)

关于javascript - Web 音频 api - 缓冲音高上的 LFO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31369424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com