Это немного сбивает с толку, но Safari выбрасывает SyntaxError
, если ему не нравятся аргументы.И, к сожалению, Safari не нравится широкий диапазон аргументов, которые обычно должны поддерживаться.
Насколько я знаю, Safari принимает только первый параметр от 1 до 10. Это параметр для numberOfChannels
. * 1005.*
Второй параметр (length
) просто должен быть положительным.
sampleRate
может быть числом только от 44100 до 96000.
Однако возможнопереведите все вычисления с 16 кГц в другой sampleRate, который затем работает в Safari.Допустим, это вычисление, которое вы хотели бы выполнить при 16 кГц:
const oac = new OfflineAudioContext(1, 10, 16000);
const osciallator = oac.createOscillator();
osciallator.frequency.value = 400;
osciallator.connect(oac.destination);
osciallator.start(0);
oac.startRendering()
.then((renderedBuffer) => {
console.log(renderedBuffer.sampleRate);
console.log(renderedBuffer.getChannelData(0));
});
Вы можете сделать почти то же самое при 48 кГц.Только sampleRate будет другим, но channelData визуализированного AudioBuffer будет таким же.библиотека, которая пытается устранить несоответствия между реализациями браузера, я должен упомянуть об этом здесь.:-) Это не поможет с ограничениями параметров в Safari, но, по крайней мере, выдаст ожидаемую ошибку, если параметр выходит за пределы диапазона.
Также обратите внимание, что length
не зависит отnumberOfChannels
.Если IfsourceAudioBuffer.duration
в вашем примере - это длительность в секундах, то вам просто нужно умножить ее на TARGET_SAMPLE_RATE
, чтобы получить желаемую length
.