PannerNode: rolloffFactor property
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Thuộc tính rolloffFactor của giao diện PannerNode là một giá trị double mô tả tốc độ giảm âm lượng khi nguồn di chuyển xa người nghe. Giá trị này được dùng bởi tất cả các mô hình khoảng cách. Giá trị mặc định của thuộc tính rolloffFactor là 1.
Giá trị
Một số có phạm vi phụ thuộc vào distanceModel của panner như sau (các giá trị âm không được phép):
"linear"-
Phạm vi là 0 đến 1.
"inverse"-
Phạm vi là 0 đến
Infinity. "exponential"-
Phạm vi là 0 đến
Infinity.
Ngoại lệ
RangeError-
Được ném ra nếu thuộc tính được gán giá trị nằm ngoài phạm vi chấp nhận.
Ví dụ
Ví dụ này minh họa cách các giá trị rolloffFactor khác nhau ảnh hưởng đến cách âm lượng của nốt nhạc thử nghiệm giảm dần với khoảng cách tăng dần từ người nghe:
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);
Sau khi chạy mã này, các dạng sóng kết quả sẽ trông như thế này:

Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| Web Audio API> # dom-pannernode-rollofffactor> |