AudioBuffer
AudioBuffer
인터페이스는 메모리에 상주하는 짧은 오디오 에셋을 나타내는데, 이는 AudioContext.decodeAudioData()
(en-US) 메서드를 사용하여 오디오 파일로부터 생성되거나, AudioContext.createBuffer()
(en-US)를 사용하여 가공되지 않은(raw) 데이터로부터 생성될 수 있습니다. 한 번 AudioBuffer에 입력되고 나면, 이 오디오는 AudioBufferSourceNode
에 전달됨으로써 재생될 수 있습니다.
이 유형의 객체는 작은 오디오 스니펫을 붙잡기 위해 설계되었고, 보통 45초보다 작습니다. 더 긴 사운드에 대해서는, MediaElementAudioSourceNode
(en-US)를 구현하는 객체가 더욱 적합합니다. 버퍼는 데이터를 다음의 포맷으로 포함합니다. non-interleaved IEEE754 32비트 선형 PCM이며, 명목상의 범위는 -1
과 +1
사이입니다. 즉, 32비트 부동 소수점 버퍼이고, 각 샘플은 -1.0과 1.0사이에 있습니다. 만약 AudioBuffer
가 다수의 채널을 가지고 있다면, 이 채널들은 별도의 버퍼에 저장됩니다.
생성자
AudioBuffer()
(en-US)-
새로운
AudioBuffer
객체 인스턴스를 생성하고 반환합니다.
속성
AudioBuffer.sampleRate
(en-US) 읽기 전용-
버퍼에 저장된 PCM 데이터의 샘플 레이트를 초당 샘플로 나타내는 float을 반환합니다.
AudioBuffer.length
(en-US) 읽기 전용-
버퍼에 저장된 PCM 데이터의 길이를 샘플 프레임으로 나타내는 integer를 반환합니다.
AudioBuffer.duration
(en-US) 읽기 전용-
버퍼 내에 저장된 PCM 데이터의 재생 길이를 초로 나타내는 double을 반환합니다.
AudioBuffer.numberOfChannels
(en-US) 읽기 전용-
버퍼 내에 저장된 PCM 데이터에 의해 기술되는 개별 오디오 채널의 수를 나타내는 integer를 반환합니다.
메서드
AudioBuffer.getChannelData()
(en-US)-
채널과 연관된 PCM 데이터를 포함하고 있는
Float32Array
를 반환하는데, 이 채널은channel
매개변수에 의해 정의됩니다 (0
은 첫번째 채널을 나타냅니다). AudioBuffer.copyFromChannel()
(en-US)-
AudioBuffer
의 명시된 채널로부터destination
배열에 샘플을 복제합니다. AudioBuffer.copyToChannel()
(en-US)-
source
배열로부터,AudioBuffer
의 명시된 채널에 샘플을 복제합니다.
예제
다음의 간단한 예제는 어떻게 AudioBuffer
를 생성하고 무작위 백색소음으로 AudioBuffer
를 채우는지 보여줍니다. 전체 소스 코드는 webaudio-examples 레포지토리에서 찾을 수 있고, 작동 예제도 볼 수 있습니다.
js
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