Если вы хотите убедиться, что вывод обрезан, вы можете сделать это как минимум тремя способами:
- Используйте
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();