diff options
author | logic-finder <logicseeker@naver.com> | 2021-11-04 00:17:41 +0900 |
---|---|---|
committer | Kyle <mkitigy@gmail.com> | 2021-12-27 08:05:33 +0900 |
commit | 206157000925262a9e196872580fe05cb6622c27 (patch) | |
tree | e43a857e3bdf79c45794bf82137b35796f8b1520 | |
parent | 5d1c761a39f1ca33971b8c25319d7105ab975ae7 (diff) | |
download | translated-content-206157000925262a9e196872580fe05cb6622c27.tar.gz translated-content-206157000925262a9e196872580fe05cb6622c27.tar.bz2 translated-content-206157000925262a9e196872580fe05cb6622c27.zip |
translate the below document.
AudioWorkletProcessor.process
-rw-r--r-- | files/ko/web/api/audioworkletprocessor/process/index.md | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/files/ko/web/api/audioworkletprocessor/process/index.md b/files/ko/web/api/audioworkletprocessor/process/index.md new file mode 100644 index 0000000000..8181241040 --- /dev/null +++ b/files/ko/web/api/audioworkletprocessor/process/index.md @@ -0,0 +1,136 @@ +--- +title: AudioWorkletProcessor.process +slug: Web/API/AudioWorkletProcessor/process +tags: + - API + - Audio + - AudioWorkletNode + - AudioWorkletProcessor + - Experimental + - Method + - Process + - Reference + - Web Audio API +browser-compat: api.AudioWorkletProcessor.process +--- +{{APIRef("Web Audio API")}} + +{{domxref("AudioWorkletProcessor")}}에서 파생된 클래스의 **`process()`** 메서드는 오디오 프로세서 worklet에 대한 오디오 프로세싱 알고리즘을 구현합니다. + +비록 이 메서드가 {{domxref("AudioWorkletProcessor")}} 인터페이스의 일부가 아니긴 하지만, `AudioWorkletProcessor` 의 모든 구현은 반드시 `process()` 메서드를 제공해야 합니다. + +이 메서드는 오디오 렌더링 스레드에서 프로세서의 해당하는 {{domxref("AudioWorkletNode")}}를 통해 향해지고 있는 (또한 렌더링 quantum으로도 알려져 있는) 각 오디오 블럭에 대해 한 번 동기적으로 호출됩니다. 다른 말로 하자면, 여러분의 프로세서가 조작할 새로운 오디오 블럭이 준비될 때마다, `process()` 함수가 그렇게 하기 위해 호출됩니다. + +> **참고:** 현재, 오디오 데이터 블럭은 항상 128 프레임 +> 길이입니다—즉, 그것들은 입력들의 채널의 각각에 대해 +> 128개의 32비트 부동점 샘플을 포함합니다. 그러나, 오디오 블럭의 크기가 상황에 따라 +> 달라지게 할 수 있도록 명세를 개정할 준비가 이미 되어 있습니다 +> (예를 들자면, 만약 오디오 하드웨어나 CPU 활용이 +> 더 큰 블럭 크기에서 더욱 효율적인 경우). 그러므로, +> 여러분은 특정한 크기를 추정하기보다는 **항상 반드시 샘플 배열의 크기를 확인** 해야 합니다. +> +> 이 크기는 심지어 시간에 따라 바뀌게 허용될지도 모르므로, +> 여러분은 절대로 단지 첫번째 블럭만을 보고 샘플 버퍼가 항상 같은 크기일 것이라고 추정해서는 안 됩니다. + +## 구문 + +```js +var isActivelyProcessing = audioWorkletProcessor.process(inputs, outputs, parameters); +``` + +### 매개변수 + +- `inputs` + + - : 노드에 연결된 _inputs_ 의 배열인데, 이것의 각각의 원소는 결국 _channel_ 들의 배열입니다. 각 _channel_ 은 128개의 샘플을 포함하고 있는 {{jsxref("Float32Array")}}입니다. 예를 들자면, `inputs[n][m][i]` 는 _n_ 번째 입력, 그 입력의 _m_ 번째 채널, 그 채널의 _i_ 번째 샘플에 접근할 것입니다. + + 각 샘플 값은 `[-1 .. 1]` 의 범위 내에 있습니다. + + _inputs_ 의 수와 따라서 그 배열의 길이는 노드의 생성에 고정되어 있습니다 ({{domxref("AudioWorkletNode")}}를 참고하세요). 만약 노드의 _n_ 번째 입력에 연결된 활성화된 노드가 없다면, `inputs[n]` 는 빈 배열일 것입니다 (0개의 입력 채널 사용 가능). + + 각 입력의 _channel_ 들의 수는 {{domxref("AudioNode.channelCount", "channelCount")}}와 {{domxref("AudioNode.channelCountMode", "channelCountMode")}} 속성에 따라 다양할 수 있습니다. + +- `outputs` + - : 구조적으로 `inputs` 매개변수와 유사한 _outputs_ 의 배열. 이것은 `process()` 메서드의 실행 중에 채워지도록 의도되었습니다. 각 출력 채널은 기본적으로 0으로 채워집니다 — 출력 배열이 수정되지 않는 한 프로세서는 무음을 출력할 것입니다. +- `parameters` + + - : 문자열 키와 {{jsxref("Float32Array")}} 값들을 포함하고 있는 객체. {{domxref("AudioWorkletProcessor.parameterDescriptors", "parameterDescriptors")}} getter를 사용해 정의된 각각의 사용자 정의 {{domxref("AudioParam")}}에 대해, 이 객체의 키는 그 {{domxref("AudioParam")}}의 `name` 이고, 그 값은 {{jsxref("Float32Array")}}입니다. 배열의 값들은 예정된 자동화 이벤트를 고려함으로써 계산됩니다. + + 만약 이 매개변수의 자동화 비율이[`"a-rate"`](/ko/docs/Web/API/AudioParam#a-rate)라면, 배열은 128개의 값 — 현재 오디오 블럭에 있는 각 프레임에 대해 하나 — 을 포함할 것입니다. 만약 현재 블럭에 의해 표현된 시간 중에 발생한 자동화가 없다면, 128개의 동일한 값 대신 배열은 모든 블럭에 대해 변함없는 하나의 값을 포함할 것입니다. + + 만약 자동화 비율이 [`"k-rate"`](/ko/docs/Web/API/AudioParam#k-rate)라면, 배열은 하나의 값을 포함할 것인데, 이는 128 프레임 각각에 대해 사용될 것입니다. + +### 반환 값 + +{{Glossary("user agent", "사용자 에이전트의")}} 내부 로직이 노드를 끄는 것이 안전하다고 다르게 판단할 지라도 {{domxref("AudioWorkletNode")}}를 활성화된 채로 유지하게 할 것인지 말 것인지를 나타내는 Boolean 값. + +반환된 값은 프로세서가 {{domxref("AudioWorkletProcessor")}}와 이것을 소유하는 노드의 생애 주기 정책에 영향을 끼칠 수 있게 합니다. 만약 반환 값과 노드 상태의 조합이 브라우저로 하여금 노드를 멈추게 결정한다면, `process()`는 다시 호출되지 않을 것입니다. + +`true` 를 반환하는 것은 Web Audio API가 노드를 계속 살려두게 하는 반면, `false` 를 반환하는 것은 만약 노드가 새로운 오디오 데이터를 생성하는 것도 아니고 처리되고 있는 이것의 입력을 통해 데이터를 받고 있는 것도 아니라면 브라우저가 노드를 제거할 수 있게 합니다. + +세 가지 가장 흔한 유형의 오디오 노드는: + +1. 출력의 소스. 이런 노드를 구현하는 {{domxref("AudioWorkletProcessor")}}는 이것이 출력을 생산하는 한 `process` 메서드에서 `true` 를 반환해야 합니다. 이 메서드는 이것이 더 이상 출력을 생산하지 않을 것이라는 것을 알게 되지마자 `false` 를 반환해야 합니다. 예시로, {{domxref("AudioBufferSourceNode")}}를 생각해 보십시오 — 이런 노드 뒤의 프로세서는 버퍼가 재생되는 동안 `process` 메서드에서 `true` 를 반환해야 하고, 버퍼 재생이 끝났을 때 `false` 반환을 시작해야 합니다 (같은 {{domxref("AudioBufferSourceNode")}}에서 다시 `play` 를 호출할 방법은 없습니다). +2. 입력을 변형시키는 노드. 이런 노드를 구현하는 프로세서는 활동 중인 입력 노드들의 존재와 그 노드에 대한 참조들이 garbage-collected 될 수 있는지를 결정할 수 있게 허용하도록 `process` 메서드에서 `false` 를 반환해야 합니다. 이 동작을 하는 노드의 예시는 {{domxref("GainNode")}}입니다. 연결된 입력과 유지되는 참조가 없어지자마자, gain은 더 이상 무엇에도 적용되지 않을 수 있으므로, 이것은 안전하게 garbage-collected 될 수 있습니다. +3. 입력을 변형시키나 소위 _tail-time_ 을 가지고 있는 노드 — 이는 이것이 심지어 입력이 끊기거나 활동이 없는 후일지라도 (0개의 채널을 생산) 몇 번에 대해 출력을 생산할 것임을 의미합니다. 이런 노드를 구현하는 프로세서는 `process` 메서드에서, 0개의 채널을 포함하는 입력이 발견되자마자 시작하며, _tail-time_ 의 기간 동안 `true` 를 반환해야 합니다. + +**참고**: `return` 문의 부재는 이 메서드가 `undefined` 를 반환할 것임을 의미하고, 이것은 falsy 값이므로, 이것은 `false`를 반환하는 것과도 같습니다. 명시적인 `return` 문을 누락하는 것은 여러분의 노드에서 감지하기 어려운 문제를 야기할 수도 있습니다. + +### 예외 + +`process()` 메서드는 유저에 의해 구현되므로, 이것은 아무 것이나 발생시킬 수 있습니다. 만약 uncaught error가 발생된다면, 노드는 {{domxref("AudioWorkletNode.onprocessorerror", "onprocessorerror")}} 이벤트를 발생시킬 것이고 이것의 생애 주기의 나머지 동안 무음을 출력할 것입니다. + +## 예제 + +이 예제에서 우리는 프로세서의 첫번째 출력에 백색소음을 출력하는 `AudioWorkletProcessor` 를 생성할 것입니다. gain은 `customGain` 매개변수에 의해 제어될 수 있습니다. + +```js +class WhiteNoiseProcessor extends AudioWorkletProcessor { + process (inputs, outputs, parameters) { + // 첫번째 출력을 취합니다 + const output = outputs[0] + // 각 채널을 gain에 의해 곱해진 무작위 값으로 채웁니다 + output.forEach(channel => { + for (let i = 0; i < channel.length; i++) { + // 각 샘플에 대해 무작위 값을 생성합니다 + // Math.random의 범위는 [0; 1)입니다; 우리는 [-1; 1]이 필요합니다 + // 이것은 정확한 1을 포함하지 않을 것이지만 단순성을 위해 지금으로선 괜찮습니다 + channel[i] = (Math.random() * 2 - 1) * + // 배열은 자동화가 존재하는지와 + // 자동화가 k-rate인지 a-rate인지에 따라 + // 1개 또는 128개의 값을 포함할 수 있습니다 + (parameters['customGain'].length > 1 + ? parameters['customGain'][i] + : parameters['customGain'][0]) + } + }) + // 이것은 자신만의 출력을 생성하는 소스 노드이므로, 만약 우리가 + // 메인 스레드에서 이것에 대해 어떠한 참조도 가지고 있지 않는다면 + // 이것이 뜻하지 않게 garbage-collected되지 않도록 우리는 true를 반환할 것입니다 + return true + } + // process 메서드에서 사용되는 customGain 매개변수를 정의합니다 + static get parameterDescriptors () { + return [{ + name: 'customGain', + defaultValue: 1, + minValue: 0, + maxValue: 1, + automationRate: 'a-rate' + }] + } +} +``` + +## 명세 + +{{Specifications}} + +## 브라우저 호환성 + +{{Compat}} + +## 같이 보기 + +- [Web Audio + API 사용하기](/ko/docs/Web/API/Web_Audio_API/Using_Web_Audio_API) |