aboutsummaryrefslogtreecommitdiff
path: root/files/ko/web/api/audiobuffer/index.md
blob: d103481a63483b79258b82d76c5e83e90e734988 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
---
title: AudioBuffer
slug: Web/API/AudioBuffer
tags:
  - API
  - AudioBuffer
  - Interface
  - Reference
  - Web Audio API
browser-compat: api.AudioBuffer
---
{{APIRef("Web Audio API")}}

**`AudioBuffer`** 인터페이스는 메모리에 상주하는 짧은 오디오 에셋을 나타내는데, 이는 {{ domxref("BaseAudioContext/decodeAudioData", "AudioContext.decodeAudioData()") }} 메서드를 사용하여 오디오 파일로부터 생성되거나, {{ domxref("BaseAudioContext/createBuffer", "AudioContext.createBuffer()") }}를 사용하여 가공되지 않은(raw) 데이터로부터 생성될 수 있습니다. 한 번 AudioBuffer에 입력되고 나면, 이 오디오는 {{ domxref("AudioBufferSourceNode") }}에 전달됨으로써 재생될 수 있습니다.

이 유형의 객체는 작은 오디오 스니펫을 붙잡기 위해 설계되었고, 보통 45초보다 작습니다. 더 긴 사운드에 대해서는, {{domxref("MediaElementAudioSourceNode")}}를 구현하는 객체가 더욱 적합합니다. 버퍼는 데이터를 다음의 포맷으로 포함합니다. non-interleaved IEEE754 32비트 선형 PCM이며, 명목상의 범위는 `-1``+1` 사이입니다. 즉, 32비트 부동 소수점 버퍼이고, 각 샘플은 -1.0과 1.0사이에 있습니다. 만약 {{domxref("AudioBuffer")}}가 다수의 채널을 가지고 있다면, 이 채널들은 별도의 버퍼에 저장됩니다.

## 생성자

- {{domxref("AudioBuffer.AudioBuffer", "AudioBuffer()")}}
  - : 새로운 `AudioBuffer` 객체 인스턴스를 생성하고 반환합니다.

## 속성

- {{domxref("AudioBuffer.sampleRate")}} {{readonlyInline}}
  - : 버퍼에 저장된 PCM 데이터의 샘플 레이트를 초당 샘플로 나타내는 float을 반환합니다.
- {{domxref("AudioBuffer.length")}} {{readonlyInline}}
  - : 버퍼에 저장된 PCM 데이터의 길이를 샘플 프레임으로 나타내는 integer를 반환합니다.
- {{domxref("AudioBuffer.duration")}} {{readonlyInline}}
  - : 버퍼 내에 저장된 PCM 데이터의 재생 길이를 초로 나타내는 double을 반환합니다.
- {{domxref("AudioBuffer.numberOfChannels")}} {{readonlyInline}}
  - : 버퍼 내에 저장된 PCM 데이터에 의해 기술되는 개별 오디오 채널의 수를 나타내는 integer를 반환합니다.

## 메서드

- {{domxref("AudioBuffer.getChannelData()")}}
  - : 채널과 연관된 PCM 데이터를 포함하고 있는 {{jsxref("Float32Array")}}를 반환하는데, 이 채널은 `channel` 매개변수에 의해 정의됩니다 (`0` 은 첫번째 채널을 나타냅니다).
- {{domxref("AudioBuffer.copyFromChannel()")}}
  - : `AudioBuffer` 의 명시된 채널로부터 `destination` 배열에 샘플을 복제합니다.
- {{domxref("AudioBuffer.copyToChannel()")}}
  - : `source` 배열로부터, `AudioBuffer` 의 명시된 채널에 샘플을 복제합니다.

## 예제

다음의 간단한 예제는 어떻게 `AudioBuffer` 를 생성하고 무작위 백색소음으로 `AudioBuffer` 를 채우는지 보여줍니다. 전체 소스 코드는 [webaudio-examples](https://github.com/mdn/webaudio-examples) 레포지토리에서 찾을 수 있고, [작동 예제](https://mdn.github.io/webaudio-examples/audio-buffer/)도 볼 수 있습니다.

```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();
```

## 명세서

{{Specifications}}

## 브라우저 호환성

{{Compat}}

## 같이 보기

- [Web Audio API 사용하기](/ko/docs/Web/API/Web_Audio_API/Using_Web_Audio_API)