PannerNode: свойство refDistance
Базовая реализация Широко доступно
Это функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Свойство refDistance интерфейса PannerNode — это число с плавающей запятой, представляющее эталонную дистанцию для уменьшения громкости по мере удаления источника звука от слушателя — то есть дистанцию, на которой начинается снижение громкости. Это значение используется всеми моделями дистанции.
Значение свойства refDistance по умолчанию равно 1.
Значение
Неотрицательное число. Если значение установлено меньше 0, выбрасывается исключение RangeError.
Исключения
RangeError-
Выбрасывается, если свойству задано значение, выходящее за допустимый диапазон.
Примеры
Этот пример демонстрирует, как разные значения refDistance влияют на то, как громкость звука уменьшается по мере удаления от слушателя. В отличие от rolloffFactor, изменение этого значения также задерживает уменьшение громкости до тех пор, пока звук не преодолеет эталонную точку.
const context = new AudioContext();
// all our test tones will last this many seconds
const NOTE_LENGTH = 6;
// this is how far we'll move the sound
const Z_DISTANCE = 20;
// this function creates a graph for the test tone with a given refDistance
// and schedules it to move away from the listener along the Z (depth-wise) axis
// at the given start time, resulting in a decrease in volume (decay)
const scheduleTestTone = (refDistance, startTime) => {
const osc = new OscillatorNode(context);
const panner = new PannerNode(context);
panner.refDistance = refDistance;
// set the initial Z position, then schedule the ramp
panner.positionZ.setValueAtTime(0, startTime);
panner.positionZ.linearRampToValueAtTime(Z_DISTANCE, startTime + NOTE_LENGTH);
osc.connect(panner).connect(context.destination);
osc.start(startTime);
osc.stop(startTime + NOTE_LENGTH);
};
// this tone should decay immediately and fairly quickly
scheduleTestTone(1, context.currentTime);
// this tone should decay slower and later than the previous one
scheduleTestTone(4, context.currentTime + NOTE_LENGTH);
// this tone should decay only slightly, and only start decaying fairly late
scheduleTestTone(7, context.currentTime + NOTE_LENGTH * 2);
После выполнения этого кода полученные волновые формы должны выглядеть примерно так:
Спецификации
| Спецификация |
|---|
| Web Audio API # dom-pannernode-refdistance |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
refDistance |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
См. также
© 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/PannerNode/refDistance