PannerNode: rolloffFactor 属性

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

PannerNode 接口的 rolloffFactor 属性是一个双精度浮点数值,它描述了当声源远离监听者时音量降低的速度。此值由所有距离模型使用。rolloffFactor 属性的默认值为 1

一个数字,其范围取决于声源的 distanceModel,如下所示(不允许负值)

"linear"

范围是 0 到 1。

"inverse"

范围是 0 到 Infinity

"exponential"

范围是 0 到 Infinity

异常

RangeError

如果属性的值超出了接受的范围,则会抛出此错误。

示例

此示例演示了不同的 rolloffFactor 值如何影响测试音的音量随监听者距离增加而衰减的方式。

js
const context = new AudioContext();
// all our test tones will last this many seconds
const NOTE_LENGTH = 4;
// this is how far we'll move the sound
const Z_DISTANCE = 20;

// this function creates a graph for the test tone with a given rolloffFactor
// and schedules it to move away from the listener along the Z (depth-wise) axis
// at the given start time, resulting in a decrease in volume (decay)
const scheduleTestTone = (rolloffFactor, startTime) => {
  const osc = new OscillatorNode(context);

  const panner = new PannerNode(context);
  panner.rolloffFactor = rolloffFactor;

  // set the initial Z position, then schedule the ramp
  panner.positionZ.setValueAtTime(0, startTime);
  panner.positionZ.linearRampToValueAtTime(Z_DISTANCE, startTime + NOTE_LENGTH);

  osc.connect(panner).connect(context.destination);

  osc.start(startTime);
  osc.stop(startTime + NOTE_LENGTH);
};

// this tone should decay fairly quickly
scheduleTestTone(1, context.currentTime);
// this tone should decay slower than the previous one
scheduleTestTone(0.5, context.currentTime + NOTE_LENGTH);
// this tone should decay only slightly
scheduleTestTone(0.1, context.currentTime + NOTE_LENGTH * 2);

运行此代码后,生成的波形应该看起来像这样

A waveform visualization of three oscillator tones produced in Web Audio. Each oscillator moves away from the listener at the same speed, but with different rolloffFactors affecting the resulting volume decay.

规范

规范
Web Audio API
# dom-pannernode-rollofffactor

浏览器兼容性

另见