是否可以根据特定公式生成音调?我试过谷歌搜索它,但我能找到的唯一的东西是正常的正弦波,如this other SO question。所以我想知道是否有可能根据其他类型的公式生成音调?
关于其他问题,我确实找到了this demo page的链接,但似乎该页面只是下载声音文件并使用它们来改变声音的音高。
我已经尝试使用基于this answer的多个振荡器来组合正弦波,这可以正常工作:
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)
),或正弦波的乘法({{1} })?
PS:我没有支持某些浏览器 - 只要它至少可以在一个浏览器中运行(尽管越多越好)。
答案 0 :(得分:4)
所有(周期性)波可以表示为正弦波的加法,而WebAudio具有基于谐波系列context.createPeriodicWave(real, imag)
合成波形的功能。
提供的real
和imag
输入数组的连续元素指定每个谐波的相对幅度和相位。
如果您想在程序上创建波形,那么理论上您可以使用所需波形填充数组,对其进行FFT,然后将生成的FFT分量传递给上述函数。
(WebAudio本身就支持锯齿波形,BTW)