生成非正弦音调

Generate a non-sinusoidal tone

本文关键字:      更新时间:2023-09-26

是否可以根据特定公式生成音调?我尝试过谷歌搜索它,但我唯一能找到的是关于正常正弦波的东西,比如另一个 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)

提供的realimag输入阵列的连续元件指定每个谐波的相对幅度和相位。

如果你想在程序上创建一个波,那么理论上你可以用所需的波形填充一个数组,获取它的FFT,然后将得到的FFT分量传递给上面的函数。

(WebAudio恰好原生支持锯齿波,顺便说一句(

相关文章:
  • 没有找到相关文章