Как создать ритм путем умножения прямоугольной волны на тон? - PullRequest
0 голосов
/ 14 мая 2019

См. Код ниже.Как я понимаю вещи:

  • beat - это прямоугольная волна, колеблющаяся между -1 и 1.

  • Подключение beat к multiplier.gain добавляет прямоугольную волну beat к усилению по умолчанию, равному 1. Результатом является усиление, которое колеблется между 0 и 2.

  • Когда tone подключено к multiplierЯ ожидаю услышать тональный сигнал 440 Гц в течение двух секунд, затем паузу в течение двух секунд, затем снова тональный сигнал и т. Д.

Однако, где я ожидаю усиления0, я до сих пор слышу тон, только приглушенный. Что я делаю не так?

Я тестировал с Chrome 74 и Firefox 66, оба на Windows 10.

Код:

<!doctype html>
<meta charset=utf-8>
<script>
  var context = new window.AudioContext();
  var tone = context.createOscillator();

  var beat = context.createOscillator();
  beat.frequency.value = 0.25;
  beat.type = "square";

  var multiplier = context.createGain();
  tone.connect(multiplier);
  beat.connect(multiplier.gain);
  multiplier.connect(context.destination);

  tone.start();
  beat.start();
</script>
<button onclick="context.resume()">Play</button>

1 Ответ

1 голос
/ 14 мая 2019

Проблема в том, что квадратный тип на самом деле не колеблется между -1 и 1. Диапазон больше или меньше от -0,848 до 0,848. Установка усиления GainNode AudioParam на это значение должно работать.

multiplier.gain.value = 0.848;

Чтобы увидеть фактическую мощность генератора, вы можете, например, использовать Навес . Он может запустить код Web Audio и затем визуализировать результаты.

Если вы, например, выполните следующий фрагмент, он покажет вам соответствующий сигнал.

var osc = new OscillatorNode(context);

osc.type = "square";

osc.connect(context.destination);
osc.start();

Надеюсь, это поможет.

...