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

같이 보기