Регулировка громкости на нескольких узлах генератора в одном аудио контексте - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть класс, который создает объект для музыкального аккорда.Его конструктор принимает произвольное количество частот (заметки).Метод start() перебирает частоты и создает узлы осциллятора с частотами при этих значениях.

То, что я пытаюсь выяснить, - это как настроить громкость на узлах осциллятора.По умолчанию они установлены на максимальный уровень громкости, что вызывает уши (это не преувеличение, если вы попытаетесь запустить этот код).

Ниже приведен мой код.В настоящее время я пытаюсь создать правильный узел усиления и подключить его к каждому генератору непосредственно перед запуском генератора.Этот подход я попробовал после прочтения этой статьи .

const audioContext = new (window.AudioContext || 
window.webkitAudioContext);

class chordObj {
  constructor() {
  this.notes = [...arguments] //Note frequencies taken as input
  }
  start() {
    //Creating an oscillator for each frequency in this.notes
    this.notes.forEach((note, i) => {
    this['note' + i] = audioContext.createOscillator();
    this['note' + i].type = 'triangle'
    this['note' + i].frequency.setValueAtTime(note, 
      audioContext.currentTime);
    this['note' + i].connect(audioContext.destination);
    })

    this.notes.forEach((note, i) => {
      const gain = audioContext.createGain();
      this['note' + i].connect(gain);
      gain.connect(audioContext.destination);
      gain.gain.value = 0.5;
      this['note' + i].start()
    })
  }
  stop () {
    this.notes.forEach((note, i) => {
    this['note' + i].stop()
    })
  }
}

const cMajor = new chordObj(130.81, 164.81, 196.00)
cMajor.start() //To start chord
cMajor.start() //To stop chord

Буду признателен за любую помощь в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...