Вы можете объединить OscillatorNode с ConstantSourceNode для достижения желаемого эффекта.
const oscillatorNode = new OscillatorNode(context);
const constantSourceNode = new ConstantSourceNode(context);
const gainNode = new GainNode(context, { gain: 0.5 });
oscillatorNode.connect(gainNode);
constantSourceNode.connect(gainNode);
gainNode.connect(context.destination);
oscillatorNode.start();
constantSourceNode.start();
Как вы сказали, OscillatorNode будет колебаться между -1 и 1. ConstantSourceNode выводит постоянный сигнал со значением 1. Если мы объединим эти два узла, мы получим сигнал, колеблющийся между 0 и 2. Затем мы можем использовать GainNode, чтобы разделить этот сигнал на 2. В результате будет сигнал, колеблющийся между 0 и 1.