- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用 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/
我使用 code 创建了三个不同的线性调频信号在这里找到。对于其他一些代码片段,我将这三种声音保存为单独的 .wav 文件。这到目前为止有效。 现在我想同时播放这三种声音。所以我想我可以使用 WebA
我是一名优秀的程序员,十分优秀!