产生非正弦音

时间:2014-12-22 17:52:44

标签: javascript web-audio

是否可以根据特定公式生成音调?我试过谷歌搜索它,但我能找到的唯一的东西是正常的正弦波,如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:我没有支持某些浏览器 - 只要它至少可以在一个浏览器中运行(尽管越多越好)。

1 个答案:

答案 0 :(得分:4)

所有(周期性)波可以表示为正弦波的加法,而WebAudio具有基于谐波系列context.createPeriodicWave(real, imag)合成波形的功能。

提供的realimag输入数组的连续元素指定每个谐波的相对幅度和相位。

如果您想在程序上创建波形,那么理论上您可以使用所需波形填充数组,对其进行FFT,然后将生成的FFT分量传递给上述函数。

(WebAudio本身就支持锯齿波形,BTW)