如何在 JavaScript 中制作立体声频率
How to make a frequency sound stereo in JavaScript
我在 JavaScript 中尝试使用两个不同的音频通道(左和右)重现不同的频率时遇到了一些麻烦。我在 Whosebug 和 Internet 上搜索了一段时间,但没有找到任何可以帮助我的东西,所以我决定在这里寻求帮助。
让我先解释一下我为什么要这样做。世界上有很多人患有耳鸣(一种“疾病”,您可以在一只耳朵或两只耳朵中听到特定的频率)。有时,人们认为耳鸣并不是什么大问题。该网站将让用户了解“耳鸣患者”的听力。为此,双耳的音频必须不同,所以我需要在两个不同的通道音频中发送不同的频率。
这是我已有的代码,它以单声道再现特定频率(完整应用程序在这里:replit.com/Tupiet/hearing):
function letsStart() {
try{
window.AudioContext = window.AudioContext || window.webKitAudioContext;
context = new AudioContext();
}
catch(e) {
alert("API isn't working");
}
}
function initFrequency() {
let range = document.getElementById('range').value;
osc = context.createOscillator();
osc.frequency.value = range;
osc.connect(context.destination);
osc
osc.start(0);
document.querySelector(".show-frequency").innerHTML = range + "Hz";
}
上面的代码是在单声道模式下播放特定频率,但正如我所料,我需要在特定声道音频中播放它。
顺便说一句,我发现我认为它可以帮助我的唯一问题是 this one,但我认为这不是我正在搜索的问题,因为它不适用于频率。
我该怎么做?我无法在任何地方解释。真的真的非常感谢!
您可以使用 ChannelMergerNode
来达到预期的效果。它可以用来拼接立体声信号。
这里是一个有两个独立振荡器的例子。
const audioContext = new AudioContext();
const leftOscillator = audioContext.createOscillator();
const leftGain = audioContext.createGain();
const rightOscillator = audioContext.createOscillator();
const rightGain = audioContext.createGain();
const merger = audioContext.createChannelMerger(2);
leftOscillator.connect(leftGain).connect(merger, 0, 0);
rightOscillator.connect(rightGain).connect(merger, 0, 1);
merger.connect(audioContext.destination);
leftOscillator.frequency.value = 800;
leftGain.gain.value = 0.5;
leftOscillator.start(0);
rightOscillator.frequency.value = 1400;
rightGain.gain.value = 0.8;
rightOscillator.start(0);
我在 JavaScript 中尝试使用两个不同的音频通道(左和右)重现不同的频率时遇到了一些麻烦。我在 Whosebug 和 Internet 上搜索了一段时间,但没有找到任何可以帮助我的东西,所以我决定在这里寻求帮助。
让我先解释一下我为什么要这样做。世界上有很多人患有耳鸣(一种“疾病”,您可以在一只耳朵或两只耳朵中听到特定的频率)。有时,人们认为耳鸣并不是什么大问题。该网站将让用户了解“耳鸣患者”的听力。为此,双耳的音频必须不同,所以我需要在两个不同的通道音频中发送不同的频率。
这是我已有的代码,它以单声道再现特定频率(完整应用程序在这里:replit.com/Tupiet/hearing):
function letsStart() {
try{
window.AudioContext = window.AudioContext || window.webKitAudioContext;
context = new AudioContext();
}
catch(e) {
alert("API isn't working");
}
}
function initFrequency() {
let range = document.getElementById('range').value;
osc = context.createOscillator();
osc.frequency.value = range;
osc.connect(context.destination);
osc
osc.start(0);
document.querySelector(".show-frequency").innerHTML = range + "Hz";
}
上面的代码是在单声道模式下播放特定频率,但正如我所料,我需要在特定声道音频中播放它。
顺便说一句,我发现我认为它可以帮助我的唯一问题是 this one,但我认为这不是我正在搜索的问题,因为它不适用于频率。
我该怎么做?我无法在任何地方解释。真的真的非常感谢!
您可以使用 ChannelMergerNode
来达到预期的效果。它可以用来拼接立体声信号。
这里是一个有两个独立振荡器的例子。
const audioContext = new AudioContext();
const leftOscillator = audioContext.createOscillator();
const leftGain = audioContext.createGain();
const rightOscillator = audioContext.createOscillator();
const rightGain = audioContext.createGain();
const merger = audioContext.createChannelMerger(2);
leftOscillator.connect(leftGain).connect(merger, 0, 0);
rightOscillator.connect(rightGain).connect(merger, 0, 1);
merger.connect(audioContext.destination);
leftOscillator.frequency.value = 800;
leftGain.gain.value = 0.5;
leftOscillator.start(0);
rightOscillator.frequency.value = 1400;
rightGain.gain.value = 0.8;
rightOscillator.start(0);