AudioParam: phương thức setValueCurveAtTime()
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.
Phương thức setValueCurveAtTime() của giao diện AudioParam lên lịch để giá trị của tham số thay đổi theo một đường cong được định nghĩa bằng một danh sách các giá trị.
Đường cong là nội suy tuyến tính giữa chuỗi giá trị được định nghĩa trong một mảng các giá trị dấu chấm động, được co giãn để khớp vào khoảng đã cho bắt đầu tại startTime và kéo dài trong một thời lượng xác định.
Cú pháp
setValueCurveAtTime(values, startTime, duration)
Tham số
values-
Một mảng số dấu chấm động biểu diễn đường cong giá trị mà
AudioParamsẽ đi qua trongdurationđã chỉ định. Mọi giá trị trong mảng phải là số hữu hạn; nếu có bất kỳ giá trị nào làNaN,Infinityhoặc-Infinity, ngoại lệTypeErrorsẽ được ném ra. startTime-
Một số thực kép biểu diễn thời điểm (tính bằng giây) kể từ sau khi
AudioContextđược tạo lần đầu mà việc thay đổi giá trị sẽ xảy ra. Nếu giá trị này nhỏ hơnAudioContext.currentTime, nó sẽ bị chặn vềcurrentTime. duration-
Một số thực kép biểu diễn tổng thời gian (tính bằng giây) mà trong đó
valuecủa tham số sẽ thay đổi theo đường cong đã chỉ định. Các giá trị đã chỉ định được phân bố đều trên toàn bộ thời lượng này.
Giá trị trả về
Tham chiếu đến đối tượng AudioParam này. Một số cách triển khai trình duyệt cũ hơn của giao diện này trả về undefined.
Ngoại lệ
InvalidStateErrorDOMException-
Được ném ra nếu mảng
valuesđược chỉ định có ít hơn 2 phần tử. RangeError-
Được ném ra nếu
startTimeđược chỉ định là số âm hoặc là giá trị không hữu hạn, hoặcdurationkhông phải là số hữu hạn dương. TypeError-
Được ném ra nếu một hoặc nhiều giá trị trong mảng
valueslà không hữu hạn. Các giá trị không hữu hạn gồmNaN,Infinityvà-Infinity.
Ghi chú sử dụng
Khi giá trị của tham số hoàn tất việc đi theo đường cong, giá trị của nó được đảm bảo sẽ khớp với giá trị cuối cùng trong tập giá trị được chỉ định bởi tham số values.
Note: Một số cách triển khai ban đầu của Web Audio API không đảm bảo điều này, dẫn đến kết quả ngoài mong đợi.
Ví dụ
Trong ví dụ này, chúng ta có một nguồn phương tiện với một nút duy nhất (xem repo webaudio-examples để xem mã nguồn, hoặc xem ví dụ trực tiếp.) Khi nhấn nút này, setValueCurveAtTime() được dùng để thay đổi giá trị gain giữa các giá trị chứa trong mảng waveArray:
// create audio context
const audioCtx = new AudioContext();
// set basic variables for example
const myAudio = document.querySelector("audio");
const valueCurve = document.querySelector(".value-curve");
// Create a MediaElementAudioSourceNode
// Feed the HTMLMediaElement into it
const source = audioCtx.createMediaElementSource(myAudio);
// Create a gain node and set its gain value to 0.5
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.5;
const 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
const 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 = () => {
gainNode.gain.setValueCurveAtTime(waveArray, audioCtx.currentTime, 2);
};
Thông số kỹ thuật
| Specification |
|---|
| Web Audio API> # dom-audioparam-setvaluecurveattime> |
Tương thích trình duyệt
Các phiên bản trước Chrome 46 dùng nearest neighbor thay vì nội suy tuyến tính.