BaseAudioContext: метод createPeriodicWave()
Базовая Широкодоступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с апреля 2021 года.
Метод createPeriodicWave() интерфейса BaseAudioContext используется для создания PeriodicWave. Эта волна используется для определения периодической формы волны, которая может быть использована для формирования выходного сигнала OscillatorNode.
Синтаксис
createPeriodicWave(real, imag) createPeriodicWave(real, imag, constraints)
Параметры
real-
Массив косинусных членов (традиционно A-члены).
imag-
Массив синусных членов (традиционно B-члены).
Массивы real и imag должны иметь одинаковую длину, иначе будет выброшено исключение.
constraintsНеобязательно-
Объект-словарь, который определяет, следует ли отключать нормализацию. Если не указано, нормализация включена по умолчанию. Он принимает один параметр:
disableNormalization-
Если установлено значение
true, нормализация для периодической волны отключена. По умолчаниюfalse.
Примечание: Если нормализация включена, результат будет иметь максимальное абсолютное значение пика 1.
Возвращаемое значение
Объект PeriodicWave.
Примеры
Следующий пример иллюстрирует простое использование createPeriodicWave(), чтобы создать объект PeriodicWave, содержащий простую синусоиду.
const real = new Float32Array(2);
const imag = new Float32Array(2);
const ac = new AudioContext();
const osc = ac.createOscillator();
real[0] = 0;
imag[0] = 0;
real[1] = 1;
imag[1] = 0;
const wave = ac.createPeriodicWave(real, imag, { disableNormalization: true });
osc.setPeriodicWave(wave);
osc.connect(ac.destination);
osc.start();
osc.stop(2);
Это работает, потому что звук, содержащий только основной тон, по определению является синусоидой.
Здесь мы создаем PeriodicWave с двумя значениями. Первое значение — смещение по оси DC, то есть значение, с которого начинается осциллятор. Значение 0 здесь хорошо, так как оно задает кривую посередине диапазона [-1.0; 1.0]. Второе и последующие значения — синусоидальные и косинусоидальные компоненты, аналогичные результату преобразования Фурье, которое преобразует значения в области времени в значения в области частот. Здесь, с помощью createPeriodicWave(), вы указываете частоты, а браузер выполняет обратное преобразование Фурье, чтобы получить буфер в области времени для частоты осциллятора. В этом примере мы установили только один компонент с полным объёмом (1.0) на основном тоне, поэтому получаем синусоиду. Имейте в виду, что основной тон соответствует частоте осциллятора (которая по умолчанию 440 Hz). Таким образом, изменение частоты осциллятора фактически смещает частоту этой периодической волны вместе с ней.
Коэффициенты преобразования Фурье должны быть заданы в возрастающем порядке (т. е. и т. д.) и могут быть положительными или отрицательными. Простой способ вручную получить такие коэффициенты (хотя не самый лучший) — использовать графический калькулятор.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
createPeriodicWave |
30 | 12 | 25 | 17 | 8 | 30 | 25 | 18 | 8 | 2.0 | 4.4 |
constraints_disableNormalization_parameter |
46 | 12 | 49 | 33 | 14.1 | 46 | 49 | 33 | 14.5 | 5.0 | 46 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/createPeriodicWave