Динамически setPeriodicWave () воспроизводимого WebAudio Oscillator? - PullRequest
0 голосов
/ 10 июля 2020

Попытка сделать базовый c синтез волновой таблицы (разработка надстройки для p5.sound ) - и интересно, можно ли динамически изменять форму волны осциллятора во время его воспроизведения (постоянный тон, а не продолжительность заметки)? В моем базовом тестировании c функция setPeriodicWave() должна быть вызвана до того, как осциллятор будет подключен к выходу AudioContext, а затем запущен. В надежде создать динамический c синтезатор волновой таблицы (с двумя жестко панорамированными каналами) для подачи в режим XY осциллографа (для векторных изображений на основе аудиосигналов). Приведенный выше рабочий процесс, постоянное создание нового осциллятора при каждом изменении волновой таблицы, вызывает множество артефактов и проблем с фазовым сдвигом ... было бы здорово, если бы я мог запустить два осциллятора и просто обновить их форму волны. Какие-нибудь советы по рабочему процессу для этого? Мой абстрактный рабочий процесс:

  • создать осциллятор с типом «custom» (с плоским / тихим волном)
  • custom setWavetable(), который использует функции из dsp. * 1020 От * до createPeriodicWave() со значениями массива
  • повторно инициировать осциллятор с этой волной (остановить осциллятор, отключить / отследить sh осцил, инициировать новый осциллятор с волной, подключить + запустить осциллятор)

1 Ответ

1 голос
/ 10 июля 2020

Какие у вас проблемы? Например, у меня это работает. Я отчетливо слышу изменение звука:

let c = new AudioContext();
let s = new OscillatorNode(c, {type: "sawtooth"});
s.connect(c.destination);
// Some random custom wave form
let w = new PeriodicWave(c, {real: [0, 1], imag: [0, 1]});
s.start();
// Wait a bit
s.setPeriodicWave(w);
// Sound changes
...