Обрезка с помощью Web Audio: Как заставить Firefox вести себя как Chrome? - PullRequest
1 голос
/ 04 июня 2019

Фрагмент кода, выполненный в Навес :

// @channels 1
// @duration 0.25
// @sampleRate 44100

var osc = new OscillatorNode(context);
var gain = context.createGain();
gain.gain.setValueAtTime(2, 0.25/2);
osc.connect(gain);
gain.connect(context.destination);
osc.start();

Запись с Audacity :

Annotated screenshot of Audacity recording showing clipping in Chrome

Клипы Chrome 74, Firefox 66 нет.

Могу ли я заставить Firefox также обрезать сигнал? (что я и ожидал)

1 Ответ

1 голос
/ 05 июня 2019

Если вы хотите убедиться, что вывод обрезан, вы можете сделать это как минимум тремя способами:

  • Используйте WaveShaperNode, чтобы выполнить вырезание за вас. (Доступно везде).
  • Используйте ScriptProcessorNode (устарело), ​​чтобы сделать отсечение.
  • Используйте AudioWorkletNode, чтобы сделать отсечение. (Пока не доступно везде.)

Пример: (добавлено OP, пожалуйста, проверьте еще раз)

// @channels 1
// @duration 0.25
// @sampleRate 44100

var osc = new OscillatorNode(context);
var gain = context.createGain();
gain.gain.setValueAtTime(2, 0.25/2);
osc.connect(gain);

var waveShaper = new WaveShaperNode(context, {
    curve: new Float32Array([-1, 1])
});
gain.connect(waveShaper);
waveShaper.connect(context.destination);

osc.start();
...