AudioBuffer
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
AudioBuffer
인터페이스는 메모리에 상주하는 짧은 오디오 에셋을 나타내는데, 이는 AudioContext.decodeAudioData()
메서드를 사용하여 오디오 파일로부터 생성되거나, AudioContext.createBuffer()
를 사용하여 가공되지 않은(raw) 데이터로부터 생성될 수 있습니다. 한 번 AudioBuffer에 입력되고 나면, 이 오디오는 AudioBufferSourceNode
에 전달됨으로써 재생될 수 있습니다.
이 유형의 객체는 작은 오디오 스니펫을 붙잡기 위해 설계되었고, 보통 45초보다 작습니다. 더 긴 사운드에 대해서는, MediaElementAudioSourceNode
를 구현하는 객체가 더욱 적합합니다. 버퍼는 데이터를 다음의 포맷으로 포함합니다. non-interleaved IEEE754 32비트 선형 PCM이며, 명목상의 범위는 -1
과 +1
사이입니다. 즉, 32비트 부동 소수점 버퍼이고, 각 샘플은 -1.0과 1.0사이에 있습니다. 만약 AudioBuffer
가 다수의 채널을 가지고 있다면, 이 채널들은 별도의 버퍼에 저장됩니다.
생성자
AudioBuffer()
-
새로운
AudioBuffer
객체 인스턴스를 생성하고 반환합니다.
속성
AudioBuffer.sampleRate
읽기 전용-
버퍼에 저장된 PCM 데이터의 샘플 레이트를 초당 샘플로 나타내는 float을 반환합니다.
AudioBuffer.length
읽기 전용-
버퍼에 저장된 PCM 데이터의 길이를 샘플 프레임으로 나타내는 integer를 반환합니다.
AudioBuffer.duration
읽기 전용-
버퍼 내에 저장된 PCM 데이터의 재생 길이를 초로 나타내는 double을 반환합니다.
AudioBuffer.numberOfChannels
읽기 전용-
버퍼 내에 저장된 PCM 데이터에 의해 기술되는 개별 오디오 채널의 수를 나타내는 integer를 반환합니다.
메서드
AudioBuffer.getChannelData()
-
채널과 연관된 PCM 데이터를 포함하고 있는
Float32Array
를 반환하는데, 이 채널은channel
매개변수에 의해 정의됩니다 (0
은 첫번째 채널을 나타냅니다). AudioBuffer.copyFromChannel()
-
AudioBuffer
의 명시된 채널로부터destination
배열에 샘플을 복제합니다. AudioBuffer.copyToChannel()
-
source
배열로부터,AudioBuffer
의 명시된 채널에 샘플을 복제합니다.
예제
다음의 간단한 예제는 어떻게 AudioBuffer
를 생성하고 무작위 백색소음으로 AudioBuffer
를 채우는지 보여줍니다. 전체 소스 코드는 webaudio-examples 레포지토리에서 찾을 수 있고, 작동 예제도 볼 수 있습니다.
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
// AudioContext의 샘플 레이트를 가지는 빈 3초짜리 스테레오 버퍼를 생성합니다.
var myArrayBuffer = audioCtx.createBuffer(
2,
audioCtx.sampleRate * 3,
audioCtx.sampleRate,
);
// 버퍼를 백색소음으로 채웁니다
// 단순히 -1.0과 1.0사이의 무작위 값
for (var channel = 0; channel < myArrayBuffer.numberOfChannels; channel++) {
// 이는 데이터를 포함하고 있는 실제 배열을 줍니다
var nowBuffering = myArrayBuffer.getChannelData(channel);
for (var i = 0; i < myArrayBuffer.length; i++) {
// Math.random()은 [0, 1.0]에 있습니다
// 오디오는 [-1.0, 1.0]에 있을 필요가 있습니다
nowBuffering[i] = Math.random() * 2 - 1;
}
}
// AudioBufferSourceNode를 얻습니다.
// 이것이 AudioBuffer를 재생하기를 원할 때 사용할 AudioNode입니다
var source = audioCtx.createBufferSource();
// AudioBufferSourceNode에 버퍼를 설정합니다
source.buffer = myArrayBuffer;
// AudioBufferSourceNode를 목적지에
// 연결해 소리가 나오게 합니다
source.connect(audioCtx.destination);
// 소스 재생을 시작합니다
source.start();
명세서
Specification |
---|
Web Audio API # AudioBuffer |
브라우저 호환성
BCD tables only load in the browser