18.09.2021

Издать звук динамика указанной частоты и длительности


Издать звук динамика указанной частоты и длительности на Javaskript.

Код:

<h1>Издать звук динамика указанной частоты и длительности</h1>

<label>Частота: <input id="fIn" min="40" max="6000" oninput="ShowRange()" type="range"></label>
<span id="fOut">773 Hz</span><br>
<label>Форма: <input id="tIn" min="0" max="3" oninput="ShowRange()" type="range"></label>
<span id="tOut">square</span><br>
<label>Громкость: <input id="vIn" min="0" max="100" oninput="ShowRange()" type="range"></label>
<span id="vOut">0.66</span><br>
<label>Длительность: <input id="dIn" min="1" max="5000" oninput="ShowRange()" type="range"></label>
<span id="dOut">266 ms</span>
<br>
<button onclick="beep();"> Да будет звук! </button>

<script type="text/javascript">
  audioCtx = new(window.AudioContext || window.webkitAudioContext)();

  ShowRange();

  function ShowRange() {
    frequency = document.getElementById("fIn").value;
    document.getElementById("fOut").innerHTML = frequency + ' Hz';

    switch (document.getElementById("tIn").value * 1) {
      case 0: type = 'sine'; name='синус'; break;
      case 1: type = 'square'; name='квадрат'; break;
      case 2: type = 'sawtooth'; name='пилообразный'; break;
      case 3: type = 'triangle'; name='треугольник'; break;
    }
    document.getElementById("tOut").innerHTML = name;

    volume = document.getElementById("vIn").value / 100;
    document.getElementById("vOut").innerHTML = volume;

    duration = document.getElementById("dIn").value;
    document.getElementById("dOut").innerHTML = duration + ' ms';
  }

  function beep() {
    var oscillator = audioCtx.createOscillator();
    var gainNode = audioCtx.createGain();

    oscillator.connect(gainNode);
    gainNode.connect(audioCtx.destination);

    gainNode.gain.value = volume;
    oscillator.frequency.value = frequency;
    oscillator.type = type;

    oscillator.start();

    setTimeout(
        function() {
          oscillator.stop();
        },
        duration
    );
  }
</script>

Пример:
773 Hz
square
0.66
266 ms

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *