AudioBuffer: phương thức getChannelData()
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 getChannelData() của giao diện AudioBuffer trả về một Float32Array chứa dữ liệu PCM liên kết với kênh được xác định bởi tham số channel (trong đó 0 biểu thị kênh đầu tiên).
Cú pháp
getChannelData(channel)
Tham số
channel-
Thuộc tính kênh là một chỉ mục biểu diễn kênh cụ thể cần lấy dữ liệu. Giá trị chỉ mục 0 biểu diễn kênh đầu tiên. Nếu giá trị chỉ mục
channellớn hơn hoặc bằngAudioBuffer.numberOfChannels, một ngoại lệINDEX_SIZE_ERRsẽ được ném ra.
Giá trị trả về
Một Float32Array.
Ví dụ
Trong ví dụ sau, chúng ta tạo một bộ đệm dài hai giây, điền vào đó nhiễu trắng, rồi phát nó thông qua một AudioBufferSourceNode. Các chú thích giải thích rõ điều gì đang diễn ra. Bạn cũng có thể chạy mã trực tiếp, hoặc xem mã nguồn.
const audioCtx = new AudioContext();
const button = document.querySelector("button");
const pre = document.querySelector("pre");
const myScript = document.querySelector("script");
pre.textContent = myScript.textContent;
// Stereo
const channels = 2;
// Tạo một bộ đệm stereo rỗng dài hai giây theo
// tần số lấy mẫu của AudioContext
const frameCount = audioCtx.sampleRate * 2.0;
const myArrayBuffer = audioCtx.createBuffer(2, frameCount, audioCtx.sampleRate);
button.onclick = () => {
// Điền nhiễu trắng vào bộ đệm;
// chỉ là các giá trị ngẫu nhiên giữa -1.0 và 1.0
for (let channel = 0; channel < channels; channel++) {
// Đây là ArrayBuffer thực sự chứa dữ liệu
const nowBuffering = myArrayBuffer.getChannelData(channel);
for (let i = 0; i < frameCount; i++) {
// Math.random() nằm trong [0; 1.0]
// âm thanh cần nằm trong [-1.0; 1.0]
nowBuffering[i] = Math.random() * 2 - 1;
}
}
// Lấy một AudioBufferSourceNode.
// Đây là AudioNode dùng khi chúng ta muốn phát một AudioBuffer
const source = audioCtx.createBufferSource();
// đặt bộ đệm vào AudioBufferSourceNode
source.buffer = myArrayBuffer;
// kết nối AudioBufferSourceNode với
// đích để chúng ta có thể nghe thấy âm thanh
source.connect(audioCtx.destination);
// bắt đầu phát nguồn
source.start();
};
Thông số kỹ thuật
| Specification |
|---|
| Web Audio API> # dom-audiobuffer-getchanneldata> |