如何在 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);