生成正弦波并在浏览器中播放
Generate sine wave and play it in the browser
我需要一个示例代码可以:
生成正弦波(样本数组)然后
播放.
全部在浏览器中使用 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)
我需要一个示例代码可以:
生成正弦波(样本数组)然后
播放.
全部在浏览器中使用 HTML5 API 在 JavaScript.
中完成(我正在标记这个网络音频,虽然我不是 100% 确定它适用)
这是使用 cross-browser 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)