AudioParam: метод setTargetAtTime()
Базовая Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Метод setTargetAtTime() интерфейса AudioParam запланирует начало постепенного изменения значения AudioParam. Это полезно для участков затухания или высвобождения в огибающих ADSR.
Синтаксис
setTargetAtTime(target, startTime, timeConstant)
Параметры
target-
Значение, к которому параметр начнёт переходить в указанное время начала.
startTime-
Время начала экспоненциального перехода в той же системе координат времени, что и
AudioContext.currentTime. Если оно меньше или равноAudioContext.currentTime, параметр начнёт изменяться немедленно. timeConstant-
Значение постоянной времени в секундах экспоненциального приближения к целевому значению. Чем больше это значение, тем медленнее будет переход.
Возвращаемое значение
Ссылка на этот объект AudioParam. Некоторые более старые реализации браузеров этого интерфейса возвращают undefined.
Описание
Изменение начинается в указанное время в startTime и экспоненциально приближается к значению, заданному параметром target. Скорость затухания, определённая параметром timeConstant, является экспоненциальной; поэтому значение никогда не достигнет target полностью, но после каждого временного шага длиной timeConstant, значение приблизится к target ещё на . Полная формула (которая использует систему первого порядка линейного непрерывного времени с неизменными параметрами), см. Спецификацию Web Audio.
Если вам абсолютно необходимо достичь целевого значения к определённому времени, вы можете использовать AudioParam.exponentialRampToValueAtTime(). Однако по математическим причинам этот метод не работает, если текущее значение или целевое значение 0.
Выбор подходящей timeConstant
Как упоминалось выше, значение изменяется экспоненциально, и каждый timeConstant приближает вас к целевому значению на 63,2%. Вам не нужно беспокоиться о достижении целевого значения; как только вы достаточно близки, дальнейшие изменения будут незаметны для человеческого уха.
В зависимости от вашего случая, достижения 95% от целевого значения может быть достаточно; в этом случае вы можете установить timeConstant к одной трети желаемой продолжительности.
Для получения дополнительной информации, см. следующую таблицу о том, как значение изменяется от 0% до 100% по мере прохождения времени.
Время с момента startTime
| Значение |
|---|---|
0 * timeConstant | 0% |
0.5 * timeConstant | 39.3% |
1 * timeConstant | 63.2% |
2 * timeConstant | 86.5% |
3 * timeConstant | 95.0% |
4 * timeConstant | 98.2% |
5 * timeConstant | 99.3% |
n * timeConstant |
Примеры
В этом примере у нас есть источник медиа с двумя кнопками управления (см. репозиторий webaudio-examples для исходного кода или посмотреть пример онлайн.) При нажатии этих кнопок используется setTargetAtTime() для плавного изменения значения усиления до 1.0 и до 0 соответственно, эффект начинается через 1 секунду, а продолжительность эффекта управляется timeConstant.
// create audio context
const audioCtx = new AudioContext();
// set basic variables for example
const myAudio = document.querySelector("audio");
const atTimePlus = document.querySelector(".at-time-plus");
const atTimeMinus = document.querySelector(".at-time-minus");
// Create a MediaElementAudioSourceNode
// Feed the HTMLMediaElement into it
const source = audioCtx.createMediaElementSource(myAudio);
// Create a gain node and set its gain value to 0.5
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.5;
let currGain = gainNode.gain.value;
// connect the AudioBufferSourceNode to the gainNode
// and the gainNode to the destination
source.connect(gainNode);
gainNode.connect(audioCtx.destination);
// set buttons to do something onclick
atTimePlus.onclick = () => {
currGain = 1.0;
gainNode.gain.setTargetAtTime(1.0, audioCtx.currentTime + 1, 0.5);
};
atTimeMinus.onclick = () => {
currGain = 0;
gainNode.gain.setTargetAtTime(0, audioCtx.currentTime + 1, 0.5);
};
Спецификации
| Спецификация |
|---|
| Web Audio API # dom-audioparam-settargetattime |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
setTargetAtTime |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | ≤37 |
См. также
© 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/AudioParam/setTargetAtTime