生成非正弦音调
Generate a non-sinusoidal tone
是否可以根据特定公式生成音调?我尝试过谷歌搜索它,但我唯一能找到的是关于正常正弦波的东西,比如另一个 SO 问题。所以我想知道是否可以基于其他类型的公式生成音调?
关于另一个 SO 问题,我确实找到了指向此演示页面的链接,但似乎该页面只是下载声音文件并使用它们来改变声音的音高。
我已经尝试过使用多个振荡器来组合正弦波,基于这个答案,它的工作原理与预期一样:
window.ctx = new webkitAudioContext();
window.osc = [];
function startTones() {
osc[0] = ctx.createOscillator(),
osc[1] = ctx.createOscillator()
osc[0].frequency.value = 120;
osc[1].frequency.value = 240;
osc[0].connect(ctx.destination);
osc[1].connect(ctx.destination);
osc[0].start(0);
osc[1].start(0);
}
function stopTones() {
osc[0].stop(0);
osc[1].stop(0);
}
<button onclick="startTones();">Start</button>
<button onclick="stopTones();">Stop</button>
所以现在我想知道,是否有可能制作一个不是基于添加这样的正弦波的波,例如锯齿波(x - floor(x)
(,或正弦波的乘法(sin(PI*440*x)*sin(PI*220*x)
(?
PS:我可以不支持某些浏览器 - 只要它仍然至少在一个浏览器中工作(尽管越多越好(。
所有(周期性(波都可以表示为正弦波的添加,WebAudio 具有基于谐波级数合成波形的功能,context.createPeriodicWave(real, imag)
。
提供的real
和imag
输入阵列的连续元件指定每个谐波的相对幅度和相位。
如果你想在程序上创建一个波,那么理论上你可以用所需的波形填充一个数组,获取它的FFT,然后将得到的FFT分量传递给上面的函数。
(WebAudio恰好原生支持锯齿波,顺便说一句(
相关文章:
- 没有找到相关文章