OfflineAudioContext
===================

`OfflineAudioContext` 인터페이스는 함께 연결된 `AudioNode`들로부터 만들어진 오디오 프로세싱 그래프를 나타내는 `AudioContext` 인터페이스입니다. 표준 `AudioContext`와는 대조적으로, `OfflineAudioContext`는 오디오를 장치 하드웨어로 렌더링하지 않습니다; 대신, 이것은 가능한 한 빨리 오디오를 생성하고, 그 결과를 `AudioBuffer`에 출력합니다.

EventTarget

BaseAudioContext

OfflineAudioContext생성자
---

`OfflineAudioContext.OfflineAudioContext()` (en-US)

새로운 `OfflineAudioContext` 인스턴스를 생성합니다.

속성
--

*또한 부모 인터페이스인 `BaseAudioContext`로부터 속성을 상속받습니다.*

`OfflineAudioContext.length` (en-US) 읽기 전용

샘플 프레임의 버퍼 사이즈를 나타내는 정수.

### 이벤트 처리기

`OfflineAudioContext.oncomplete` (en-US)

`OfflineAudioContext.startRendering()` (en-US)의 이벤트 기반 버전이 사용된 이후, 프로세싱이 종료되었을 때, 즉 (`OfflineAudioCompletionEvent` (en-US) 유형의) `complete (en-US)` 이벤트가 발생되었을 때 호출되는 이벤트 처리기 (en-US)입니다.

메서드
---

*또한 부모 인터페이스인 `BaseAudioContext`로부터 메서드를 상속받습니다.*

`OfflineAudioContext.suspend()` (en-US)

특정한 시간에서의 오디오 컨텍스트의 시간 진행의 연기를 스케쥴링하고 프로미스를 반환합니다.

`OfflineAudioContext.startRendering()` (en-US)

현재 연결과 현재 스케쥴링된 변화를 고려하며 오디오 렌더링을 시작합니다. 이 문서는 이벤트 기반 버전과 프로미스 기반 버전 모두를 다룹니다.

### 더 이상 사용되지 않는 메서드

`OfflineAudioContext.resume()` (en-US)

이전에 연기된 오디오 컨텍스트에서의 시간 진행을 재개합니다.


**참고:** `resume()` 메서드는 여전히 사용 가능합니다 — 이것은 이제 `BaseAudioContext` 인터페이스에 정의되었고 (`AudioContext.resume` (en-US)을 참조하세요) 따라서 `AudioContext`와 `OfflineAudioContext` 인터페이스 모두에서 접근 가능합니다.

이벤트
---

`addEventListener()`를 사용하거나 이벤트 수신기를 이 인터페이스의 `oneventname` 속성에 부여함으로써 이 이벤트들을 수신하세요.

`complete` (en-US)

 오프라인 오디오 컨텍스트의 렌더링이 완료되었을 때 발생됩니다.
 또한 `oncomplete` (en-US) 이벤트 처리기 속성을 사용하여 이용 가능합니다.


예제
--

이 간단한 예제에서, 우리는 `AudioContext`와 `OfflineAudioContext` 객체 모두를 선언합니다. 우리는 `AudioContext`을 XHR(`BaseAudioContext.decodeAudioData` (en-US))을 통해 오디오 트랙을 로드하기 위해 사용하고, 그리고 나서 `OfflineAudioContext`를 오디오를 `AudioBufferSourceNode`에 렌더링하고 트랙을 재생하기 위해 사용합니다. 오프라인 오디오 그래프가 준비된 후, 여러분은 `OfflineAudioContext.startRendering` (en-US)을 사용하여 `AudioBuffer`에 이것을 렌더링할 필요가 있습니다.

`startRendering()` 프로미스가 이행할 때, 렌더링은 완료되었고 `AudioBuffer` 출력은 프로미스에서 반환됩니다.

이 시점에서 우리는 다른 오디오 컨텍스트를 생성하고, 그것의 내부에 `AudioBufferSourceNode`를 생성하고, 그리고 이것의 버퍼를 `AudioBuffer` 프로미스와 같게 설정합니다. 이것은 그리고 나서 간단한 표준 오디오 그래프의 일부로 재생됩니다.

**참고:** 작동하는 예제를 보려면 offline-audio-context-promise GitHub 레포지토리를 참고하세요 (소스 코드도 보세요.)


```js
// 온라인과 오프라인 오디오 컨텍스트를 정의합니다

var audioCtx = new AudioContext();
var offlineCtx = new OfflineAudioContext(2, 44100 \* 40, 44100);

source = offlineCtx.createBufferSource();

// 오디오 트랙을 로딩하기 위해 XHR를 사용하고,
// 이것을 디코딩하기 위해 decodeAudioData를 사용하고 렌더링하기 위해 OfflineAudioContext를 사용합니다

function getData() {
  request = new XMLHttpRequest();

  request.open("GET", "viper.ogg", true);

  request.responseType = "arraybuffer";

  request.onload = function () {
    var audioData = request.response;

    audioCtx.decodeAudioData(audioData, function (buffer) {
      myBuffer = buffer;
      source.buffer = myBuffer;
      source.connect(offlineCtx.destination);
      source.start();
      //source.loop = true;
      offlineCtx
        .startRendering()
        .then(function (renderedBuffer) {
          console.log("Rendering completed successfully");
          var song = audioCtx.createBufferSource();
          song.buffer = renderedBuffer;

          song.connect(audioCtx.destination);

          play.onclick = function () {
            song.start();
          };
        })
        .catch(function (err) {
          console.log("Rendering failed: " + err);
          // 참고: 이 프로미스는 OfflineAudioContext에서 startRendering이 두 번째로 호출되었을 때 거부되어야만 합니다
        });
    });
  };

  request.send();
}

// 프로세스를 시작하기 위해 getData를 실행합니다

getData();
```

명세
--

| Specification |
| --- |
| Web Audio API # OfflineAudioContext |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* Web Audio API 사용하기