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

Generate sine wave and play it in the browser

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

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

  2. 播放.

全部在浏览器中使用 HTML5 API 在 JavaScript.

中完成

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

这是使用 cross-browser AudioContext.

在浏览器中播放 441 赫兹正弦波音调的方法

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)