WebAudio - 振荡器 setPeridiocWave
WebAudio - Oscillator setPeridiocWave
我使用在 SO 上找到的 code 创建了三种不同的线性调频。对于其他一些代码片段,我将这三种声音保存为单独的 .wav 文件。这到目前为止有效。
现在我想同时播放这三种声音。所以我想我可以使用 WebAudio API,为三个振荡器节点提供我从上面的代码中获得的浮点数组。
但是我没有得到至少一个振荡器节点来播放它的声音。
到目前为止我的代码(为一个振荡器缩小)
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 值),所以我认为问题出在我的周期波上。
另外一个问题:有什么不同的方法吗?也许喜欢使用链接到我的三个 .wav 文件的三个 MediaElementAudioSourceNode。我看不到同时播放它们的方法。
PeriodicWave 不是 "stick a waveform in here and it will be used as a single oscillation" 功能 - 它通过指定各种谐波的相对强度来构建波形。请注意,在您指向的代码中,它们创建了一个 BufferSource 节点并将其 .buffer 指向 linearchirp() 的结果。您也可以这样做——只需使用 BufferSource 节点来回放 linearshirp() 输出,(我认为?)这只是正弦波吗? (如果是这样,您可以只使用振荡器并跳过整个混乱的 "create a buffer" 位。)
如果您只想回放您创建的缓冲区,请使用 BufferSource。如果您想创建复杂的谐波,请使用 PeriodicWave。如果您已经创建了一个单周期波形并希望将其作为源波形播放,请使用 BufferSource 并循环播放它。
我使用在 SO 上找到的 code 创建了三种不同的线性调频。对于其他一些代码片段,我将这三种声音保存为单独的 .wav 文件。这到目前为止有效。
现在我想同时播放这三种声音。所以我想我可以使用 WebAudio API,为三个振荡器节点提供我从上面的代码中获得的浮点数组。 但是我没有得到至少一个振荡器节点来播放它的声音。
到目前为止我的代码(为一个振荡器缩小)
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 值),所以我认为问题出在我的周期波上。
另外一个问题:有什么不同的方法吗?也许喜欢使用链接到我的三个 .wav 文件的三个 MediaElementAudioSourceNode。我看不到同时播放它们的方法。
PeriodicWave 不是 "stick a waveform in here and it will be used as a single oscillation" 功能 - 它通过指定各种谐波的相对强度来构建波形。请注意,在您指向的代码中,它们创建了一个 BufferSource 节点并将其 .buffer 指向 linearchirp() 的结果。您也可以这样做——只需使用 BufferSource 节点来回放 linearshirp() 输出,(我认为?)这只是正弦波吗? (如果是这样,您可以只使用振荡器并跳过整个混乱的 "create a buffer" 位。)
如果您只想回放您创建的缓冲区,请使用 BufferSource。如果您想创建复杂的谐波,请使用 PeriodicWave。如果您已经创建了一个单周期波形并希望将其作为源波形播放,请使用 BufferSource 并循环播放它。