The setValueCurveAtTime() method of the AudioParam interface schedules the parameter's value to change following a curve defined by a list of values. The curve is a linear interpolation between the sequence of values defined in an array of floating-point values, which are scaled to fit into the given interval starting at startTime and a specific duration.
Syntax
var paramRef = param.setValueCurveAtTime(values, startTime, duration);
Parameters
values- An array of floating-point numbers representing the value curve the
AudioParamwill change through along the specifiedduration. Every value in the array must be a finite number; if any value isNaN,Infinity, or-Infinity, aTypeErrorexception is thrown. startTime- A double representing the time (in seconds) after the
AudioContextwas first created that the change in value will happen. If this value is lower thanAudioContext.currentTime, it is clamped tocurrentTime. duration- A double representing the total time (in seconds) over which the parameter's
valuewill change following the specified curve. The specified values are spaced equally along this duration.
Return value
A reference to this AudioParam object. Some older browser implementations of this interface return undefined.
Exceptions
InvalidStateError- The specified array of
valueshas fewer than 2 items in it. RangeError- The specified
startTimeis either negative or a non-finite value, ordurationis not a finite, strictly positive number. TypeError- One or more of the values in the
valuesarray is non-finite. Non-finite values areNaN,Infinity, and-Infinity.
Usage notes
When the parameter's value finishes following the curve, its value is guaranteed to match the last value in the set of values specified in the values parameter.
Note: Some early implementations of the Web Audio API did not ensure this to be the case, causing unexpected results.
Examples
In this example, we have a media source with a single button (see the webaudio-examples repo for the source code, or [[../../../../../../../mdn.github.io/webaudio-examples/audio-param/index|view the example live]].) When this button is pressed, setValueCurveAtTime() is used to change the gain value between the values contained in the waveArray array:
// create audio context
var AudioContext = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();
// set basic variables for example
var myAudio = document.querySelector('audio');
var pre = document.querySelector('pre');
var myScript = document.querySelector('script');
pre.innerHTML = myScript.innerHTML;
var valueCurve = document.querySelector('.value-curve');
// Create a MediaElementAudioSourceNode
// Feed the HTMLMediaElement into it
var source = audioCtx.createMediaElementSource(myAudio);
// Create a gain node and set it's gain value to 0.5
var gainNode = audioCtx.createGain();
gainNode.gain.value = 0.5;
var currGain = gainNode.gain.value;
// connect the AudioBufferSourceNode to the gainNode
// and the gainNode to the destination
source.connect(gainNode);
gainNode.connect(audioCtx.destination);
// set button to do something onclick
var waveArray = new Float32Array(9);
waveArray[0] = 0.5;
waveArray[1] = 1;
waveArray[2] = 0.5;
waveArray[3] = 0;
waveArray[4] = 0.5;
waveArray[5] = 1;
waveArray[6] = 0.5;
waveArray[7] = 0;
waveArray[8] = 0.5;
valueCurve.onclick = function() {
gainNode.gain.setValueCurveAtTime(waveArray, audioCtx.currentTime, 2);
}
Specifications
| Specification | Status | Comment |
| Web Audio APIThe definition of 'setValueCurveAtTime' in that specification. | Working Draft |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
setValueCurveAtTime
|
Chrome
Full support 14 |
Edge
Full support 12 |
Firefox
Full support 25 |
IE
No support No |
Opera
Full support 15 |
Safari
Full support 6 |
WebView Android
Full support Yes |
Chrome Android
Full support 18 |
Firefox Android
Full support 26 |
Opera Android
Full support 14 |
Safari iOS
Full support Yes |
Samsung Internet Android
Full support 1.0 |
Legend
- Full support
- Full support
- No support
- No support
Versions before Chrome 46 use nearest neighbor instead of linear interpolation.
See also
AudioParam.setValueCurveAtTime() by Mozilla Contributors is licensed under CC-BY-SA 2.5.