gpt4 book ai didi

javascript - WebAudio - 振荡器 setPeridiocWave

转载 作者:搜寻专家 更新时间:2023-10-31 08:52:44 27 4
gpt4 key购买 nike

我使用 code 创建了三个不同的线性调频信号在这里找到。对于其他一些代码片段,我将这三种声音保存为单独的 .wav 文件。这到目前为止有效。

现在我想同时播放这三种声音。所以我想我可以使用 WebAudio API,为三个振荡器节点提供我从上面的代码中获得的 float 组。但是我至少没有一个振荡器节点来播放它的声音。

到目前为止我的代码(为一个振荡器缩小)

var osc = audioCtx.createOscillator();
var sineData = linearChirp(freq, (freq + signalLength), signalLength, audioCtx.sampleRate); // linearChirp from link above
// sine values; add 0 at the front because the docs states that the first value is ignored
var imag = Float32Array.from(sineData.unshift(0));
var real = new Float32Array(imag.length); // cos values
var customWave = audioCtx.createPeriodicWave(real, imag);
osc.setPeriodicWave(customWave);
osc.start();

目前我想我不太了解周期波背后的整个数学原理。

同时播放三种声音的代码有效(振荡器节点中有简单的 sin 值),所以我假设问题出在我的周期波上。

另一个问题:有没有不同的方式?也许喜欢用三个 MediaElementAudioSourceNode链接到我的三个 .wav 文件。我看不到同时播放它们的方法。

最佳答案

PeriodicWave 不是“在此处粘贴波形,它将用作单个振荡”功能 - 它通过指定各种谐波的相对强度来构建波形。请注意,在您指向的代码中,它们创建了一个 BufferSource 节点并将其 .buffer 指向 linearchirp() 的结果。您也可以这样做——只需使用 BufferSource 节点来回放 linearshirp() 输出,(我认为?)这只是正弦波吗? (如果是这样,您可以只使用振荡器并跳过整个困惑的“创建缓冲区”位。)

如果您只想回放您创建的缓冲区,请使用 BufferSource。如果您想创建复杂的谐波,请使用 PeriodicWave。如果您已经创建了一个单周期波形并且想要将其作为源波形播放,请使用 BufferSource 并循环播放它。

关于javascript - WebAudio - 振荡器 setPeridiocWave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37102953/

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