AudioParam.value - Web APIs 编辑
The Web Audio API's AudioParam
interface property value
gets or sets the value of this AudioParam
at the current time. Initially, the value is set to AudioParam.defaultValue
.
Setting value
has the same effect as calling AudioParam.setValueAtTime
with the time returned by the AudioContext
's currentTime
property..
Syntax
var curValue = audioParam.value; audioParam.value = newValue;
Value
A floating-point Number
indicating the parameter's value as of the current time. This value will be between the values specified by the minValue
and maxValue
properties.
Usage notes
Value precision and variation
The data type used internally to store value
is a single-precision (32-bit) floating point number, while JavaScript uses 64-bit double-precision floating point numbers. As a result, the value you read from the value
property may not always exactly equal what you set it to.
Consider this example:
const source = new AudioBufferSourceNode(...);
const rate = 5.3;
source.playbackRate.value = rate;
console.log(source.playbackRate.value === rate);
The log output will be false
, because the playback rate parameter, rate
, was converted to the 32-bit floating-point number closest to 5.3, which yields 5.300000190734863. One solution is to use the Math.fround()
method, which returns the single-precision value equivalent to the 64-bit JavaScript value specified—when setting value
, like this:
const source = new AudioBufferSourceNode(...); const rate = Math.fround(5.3); source.playbackRate.value = rate; console.log(source.playbackRate.value === rate);
In this case, the log output will be true
.
Value of a property which is changing over time
The value
of an AudioParam
can either be fixed or can vary over time. This is reflected by the value
getter, which returns the value of the parameter as of the audio rendering engine's most recent render quantum, or moment at which audio buffers are processed and updated. In addition to processing audio buffers, each render quantum updates the value
of each AudioParam
as needed given the current time and any established time-based parameter value changes.
Upon first creating the parameter, its value is set to its default value, given by AudioParam.defaultValue
. This is the parameter's value at a time of 0.0 seconds, and will remain the parameter's value until the first render quantum in which the value is altered.
During each render quantum, the browser does the following things related to managing the value of a parameter:
- If the
value
setter has been used, the parameter's value is changed to the value given. - If the current time equals or exceeds the time specified by a previous call to
setValueAtTime()
, thevalue
is changed to the value passed intosetValueAtTime()
. - If any gradiated or ramped value changing methods have been called and the current time is within the time range over which the graduated change should occur, the value is updated based on the appropriate algorithm. These ramped or gradiated value-changing methods include
linearRampToValueAtTime()
,setTargetAtTime()
, andsetValueCurveAtTime()
.
Thus, the value
of a parameter is maintained to accurately reflect the state of the parameter over time.
Example
This example instantly changes the volume of a GainNode
to 40%.
const audioCtx = new AudioContext();
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.4;
//which is identical to:
gainNode.gain.setValueAtTime(0.4, audioCtx.currentTime);
Specifications
Specification | Status | Comment |
---|---|---|
Web Audio API The definition of 'value' in that specification. | Working Draft |
Browser compatibility
BCD tables only load in the browser
When changing the gain value of a GainNode
, Google Chrome prior to version 64 (January 2018) would perform a smooth interpolation to prevent dezippering. Starting with version 64, the value is changed instantly to bring it in line with the Web Audio spec. See Chrome Platform Status for details.
See also
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论