Interface AudioParam

AudioParam controls an individual aspect of an AudioNode's functioning, such as volume. The parameter can be set immediately to a particular value using the "value" attribute. Or, value changes can be scheduled to happen at very precise times (in the coordinate system of AudioContext.currentTime), for envelopes, volume fades, LFOs, filter sweeps, grain windows, etc. In this way, arbitrary timeline-based automation curves can be set on any AudioParam. Additionally, audio signals from the outputs of AudioNodes can be connected to an AudioParam, summing with the intrinsic parameter value.

Some synthesis and processing AudioNodes have AudioParams as attributes whose values must be taken into account on a per-audio-sample basis. For other AudioParams, sample-accuracy is not important and the value changes can be sampled more coarsely. Each individual AudioParam will specify that it is either an a-rate parameter which means that its values must be taken into account on a per-audio-sample basis, or it is a k-rate parameter.

Implementations must use block processing, with each AudioNode processing 128 sample-frames in each block.

For each 128 sample-frame block, the value of a k-rate parameter must be sampled at the time of the very first sample-frame, and that value must be used for the entire block. a-rate parameters must be sampled for each sample-frame of the block.

Index

Properties

Methods

Properties

public defaultValue: number

Initial value for the value attribute

public maxValue: number

Nominal maximum value. This attribute is informational and value may be set higher than this value.

public minValue: number

Nominal minimum value. This attribute is informational and value may be set lower than this value.

public value: number

The parameter's floating-point value. This attribute is initialized to the defaultValue. If a value is set outside the allowable range described by minValue and maxValue no exception is thrown, because these limits are just nominal and may be exceeded. If a value is set during a time when there are any automation events scheduled then it will be ignored and no exception will be thrown.

Methods

public cancelScheduledValues(startTime: number)

Cancels all scheduled parameter changes with times greater than or equal to startTime.

Parameters

  • startTime: number

    the starting time at and after which any previously scheduled parameter changes will be cancelled. It is a time in the same time coordinate system as AudioContext.currentTime.

public exponentialRampToValueAtTime(value: number, endTime: number)

Schedules an exponential continuous change in parameter value from the previous scheduled parameter value to the given value. Parameters representing filter frequencies and playback rate are best changed exponentially because of the way humans perceive sound.

The value during the time interval T0 <= t < T1 (where T0 is the time of the previous event and T1 is the endTime parameter passed into this method) will be calculated as:

v(t) = V0 * (V1 / V0) ^ ((t - T0) / (T1 - T0))

Where V0 is the value at the time T0 and V1 is the value parameter passed into this method.

If there are no more events after this ExponentialRampToValue event then for t >= T1, v(t) = V1

Parameters

  • value: number

    the value the parameter will exponentially ramp to at the given time. An exception will be thrown if this value is less than or equal to 0, or if the value at the time of the previous event is less than or equal to 0.

  • endTime: number

    the time in the same time coordinate system as AudioContext.currentTime.

public linearRampToValueAtTime(value: number, time: number)

Schedules a linear continuous change in parameter value from the previous scheduled parameter value to the given value.

The value during the time interval T0 <= t < T1 (where T0 is the time of the previous event and T1 is the endTime parameter passed into this method) will be calculated as:

 v(t) = V0 + (V1 - V0) * ((t - T0) / (T1 - T0))

Where V0 is the value at the time T0 and V1 is the value parameter passed into this method.

If there are no more events after this LinearRampToValue event then for t >= T1, v(t) = V1

Parameters

  • value: number

    the value the parameter will linearly ramp to at the given time.

  • time: number

public setTargetValueAtTime(target: number, startTime: number, timeConstant: number)

Start exponentially approaching the target value at the given time with a rate having the given time constant. Among other uses, this is useful for implementing the "decay" and "release" portions of an ADSR envelope. Please note that the parameter value does not immediately change to the target value at the given time, but instead gradually changes to the target value.

More precisely, timeConstant is the time it takes a first-order linear continuous time-invariant system to reach the value 1 - 1/e (around 63.2%) given a step input response (transition from 0 to 1 value).

During the time interval: T0 <= t < T1, where T0 is the startTime parameter and T1 represents the time of the event following this event (or infinity if there are no following events):

 v(t) = V1 + (V0 - V1) * exp(-(t - T0) / timeConstant)

Where V0 is the initial value (the .value attribute) at T0 (the startTime parameter) and V1 is equal to the target parameter.

Parameters

  • target: number

    the value the parameter will start changing to at the given time.

  • startTime: number

    the time in the same time coordinate system as AudioContext.currentTime.

  • timeConstant: number

    the time-constant value of first-order filter (exponential) approach to the target value. The larger this value is, the slower the transition will be.

public setValueAtTime(value: number, startTime: number)

Schedules a parameter value change at the given time.

If there are no more events after this SetValue event, then for t >= startTime, v(t) = value. In other words, the value will remain constant.

If the next event (having time T1) after this SetValue event is not of type LinearRampToValue or ExponentialRampToValue, then, for t: startTime <= t < T1, v(t) = value. In other words, the value will remain constant during this time interval, allowing the creation of "step" functions.

If the next event after this SetValue event is of type LinearRampToValue or ExponentialRampToValue then please see details below.

Parameters

  • value: number

    the value the parameter will change to at the given time

  • startTime: number

    parameter is the time in the same time coordinate system as AudioContext.currentTime.

public setValueCurveAtTime(values: Float32Array, time: number, duration: number)

Sets an array of arbitrary parameter values starting at the given time for the given duration. The number of values will be scaled to fit into the desired duration.

During the time interval: startTime <= t < startTime + duration, values will be calculated:

v(t) = values[N * (t - startTime) / duration], where N is the length of the values array.

After the end of the curve time interval (t >= startTime + duration), the value will remain constant at the final curve value, until there is another automation event (if any).

Parameters

  • values: Float32Array

    a Float32Array representing a parameter value curve. These values will apply starting at the given time and lasting for the given duration.

  • time: number
  • duration: number

    the amount of time in seconds (after the time parameter) where values will be calculated according to the values parameter..