生成正弦波并在浏览器中播放

exe*_*ook 4 javascript audio html5 cross-browser web-audio-api

我需要一个示例代码,可以:

  1. 生成正弦波(样本数组)然后

  2. 玩吧.

所有这些都是在浏览器中使用JavaScript中的一些HTML5 API完成的

(我正在标记这个网络音频,虽然我不是100%确定它是适用的)

exe*_*ook 14

这是如何使用跨浏览器在浏览器中播放441 Hertz正弦波音AudioContext.

window.AudioContext = window.AudioContext || window.webkitAudioContext;

var context = new AudioContext();

function playSound(arr) {
    var buf = new Float32Array(arr.length)
    for (var i = 0; i < arr.length; i++) buf[i] = arr[i]
    var buffer = context.createBuffer(1, buf.length, context.sampleRate)
    buffer.copyToChannel(buf, 0)
    var source = context.createBufferSource();
    source.buffer = buffer;
    source.connect(context.destination);
    source.start(0);
}

function sineWaveAt(sampleNumber, tone) {
    var sampleFreq = context.sampleRate / tone
    return Math.sin(sampleNumber / (sampleFreq / (Math.PI*2)))
}

var arr = [], volume = 0.2, seconds = 0.5, tone = 441

for (var i = 0; i < context.sampleRate * seconds; i++) {
    arr[i] = sineWaveAt(i, tone) * volume
}

playSound(arr)
Run Code Online (Sandbox Code Playgroud)

  • @RaymondToy 因为您可以以所有创造性的方式编辑创建的波形,淡入/淡出、扭曲、切割、与其他波形混合以及对样本阵列进行任何其他 DSP 软处理。 (4认同)
  • 虽然这回答了 OP 问题,但当您可以使用 WebAudio 的振荡器节点来创建所需频率和持续时间的正弦波时,为什么还要创建自己的采样正弦波呢? (2认同)