Spec-Zone.ru › Web APIs

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 ещё на 1-e-1≈63.2%1 - e^{-1} \approx 63.2%. Полная формула (которая использует систему первого порядка линейного непрерывного времени с неизменными параметрами), см. Спецификацию 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 1
1-e-n1 - e^{-n}

Примеры

В этом примере у нас есть источник медиа с двумя кнопками управления (см. репозиторий 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

См. также

  • Использование Web Audio API

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API