AudioWorkletProcessor
ìì íìë í´ëì¤ì process()
ë©ìëë ì¤ëì¤ íë¡ì¸ì workletì ëí ì¤ëì¤ íë¡ì¸ì± ìê³ ë¦¬ì¦ì 구íí©ëë¤.
ë¹ë¡ ì´ ë©ìëê° AudioWorkletProcessor
ì¸í°íì´ì¤ì ì¼ë¶ê° ìë긴 íì§ë§, AudioWorkletProcessor
ì 모ë 구íì ë°ëì process()
ë©ìë를 ì ê³µí´ì¼ í©ëë¤.
ì´ ë©ìëë ì¤ëì¤ ë ëë§ ì¤ë ëìì íë¡ì¸ìì í´ë¹íë AudioWorkletNode
를 íµí´ í¥í´ì§ê³ ìë (ëí ë ëë§ quantumì¼ë¡ë ìë ¤ì ¸ ìë) ê° ì¤ëì¤ ë¸ëì ëí´ í ë² ë기ì ì¼ë¡ í¸ì¶ë©ëë¤. ë¤ë¥¸ ë§ë¡ íìë©´, ì¬ë¬ë¶ì íë¡ì¸ìê° ì¡°ìí ìë¡ì´ ì¤ëì¤ ë¸ëì´ ì¤ë¹ë ëë§ë¤, process()
í¨ìê° ê·¸ë ê² í기 ìí´ í¸ì¶ë©ëë¤.
ì°¸ê³ :
íì¬, ì¤ëì¤ ë°ì´í° ë¸ëì íì 128 íë ì 길ì´ì ëë¤âì¦, ê·¸ê²ë¤ì ì ë ¥ë¤ì ì±ëì ê°ê°ì ëí´ 128ê°ì 32ë¹í¸ ë¶ëì ìíì í¬í¨í©ëë¤. ê·¸ë¬ë, ì¤ëì¤ ë¸ëì í¬ê¸°ê° ìí©ì ë°ë¼ ë¬ë¼ì§ê² í ì ìëë¡ ëª ì¸ë¥¼ ê°ì í ì¤ë¹ê° ì´ë¯¸ ëì´ ììµëë¤ (ì를 ë¤ìë©´, ë§ì½ ì¤ëì¤ íëì¨ì´ë CPU íì©ì´ ë í° ë¸ë í¬ê¸°ìì ëì± í¨ì¨ì ì¸ ê²½ì°). ê·¸ë¬ë¯ë¡, ì¬ë¬ë¶ì í¹ì í í¬ê¸°ë¥¼ ì¶ì í기보ë¤ë íì ë°ëì ìí ë°°ì´ì í¬ê¸°ë¥¼ íì¸ í´ì¼ í©ëë¤.
ì´ í¬ê¸°ë ì¬ì§ì´ ìê°ì ë°ë¼ ë°ëê² íì©ë ì§ë 모르ë¯ë¡, ì¬ë¬ë¶ì ì ëë¡ ë¨ì§ 첫ë²ì§¸ ë¸ëë§ì ë³´ê³ ìí ë²í¼ê° íì ê°ì í¬ê¸°ì¼ ê²ì´ë¼ê³ ì¶ì í´ìë ì ë©ëë¤.
구문var isActivelyProcessing = audioWorkletProcessor.process(
inputs,
outputs,
parameters,
);
매ê°ë³ì
inputs
ë
¸ëì ì°ê²°ë inputs ì ë°°ì´ì¸ë°, ì´ê²ì ê°ê°ì ììë ê²°êµ channel ë¤ì ë°°ì´ì
ëë¤. ê° channel ì 128ê°ì ìíì í¬í¨íê³ ìë Float32Array
ì
ëë¤. ì를 ë¤ìë©´, inputs[n][m][i]
ë n ë²ì§¸ ì
ë ¥, ê·¸ ì
ë ¥ì m ë²ì§¸ ì±ë, ê·¸ ì±ëì i ë²ì§¸ ìíì ì ê·¼í ê²ì
ëë¤.
ê° ìí ê°ì [-1 .. 1]
ì ë²ì ë´ì ììµëë¤.
inputs ì ìì ë°ë¼ì ê·¸ ë°°ì´ì 길ì´ë ë
¸ëì ìì±ì ê³ ì ëì´ ììµëë¤ (AudioWorkletNode
를 ì°¸ê³ íì¸ì). ë§ì½ ë
¸ëì n ë²ì§¸ ì
ë ¥ì ì°ê²°ë íì±íë ë
¸ëê° ìë¤ë©´, inputs[n]
ë ë¹ ë°°ì´ì¼ ê²ì
ëë¤ (0ê°ì ì
ë ¥ ì±ë ì¬ì© ê°ë¥).
ê° ì
ë ¥ì channel ë¤ì ìë channelCount
ì channelCountMode
ìì±ì ë°ë¼ ë¤ìí ì ììµëë¤.
outputs
구조ì ì¼ë¡ inputs
매ê°ë³ìì ì ì¬í outputs ì ë°°ì´. ì´ê²ì process()
ë©ìëì ì¤í ì¤ì ì±ìì§ëë¡ ìëëììµëë¤. ê° ì¶ë ¥ ì±ëì 기본ì ì¼ë¡ 0ì¼ë¡ ì±ìì§ëë¤ â ì¶ë ¥ ë°°ì´ì´ ìì ëì§ ìë í íë¡ì¸ìë 무ìì ì¶ë ¥í ê²ì
ëë¤.
parameters
문ìì´ í¤ì Float32Array
ê°ë¤ì í¬í¨íê³ ìë ê°ì²´. parameterDescriptors
getter를 ì¬ì©í´ ì ìë ê°ê°ì ì¬ì©ì ì ì AudioParam
ì ëí´, ì´ ê°ì²´ì í¤ë ê·¸ AudioParam
ì name
ì´ê³ , ê·¸ ê°ì Float32Array
ì
ëë¤. ë°°ì´ì ê°ë¤ì ìì ë ìëí ì´ë²¤í¸ë¥¼ ê³ ë ¤í¨ì¼ë¡ì¨ ê³ì°ë©ëë¤.
ë§ì½ ì´ ë§¤ê°ë³ìì ìëí ë¹ì¨ì´"a-rate"
ë¼ë©´, ë°°ì´ì 128ê°ì ê° â íì¬ ì¤ëì¤ ë¸ëì ìë ê° íë ìì ëí´ íë â ì í¬í¨í ê²ì
ëë¤. ë§ì½ íì¬ ë¸ëì ìí´ ííë ìê° ì¤ì ë°ìí ìëíê° ìë¤ë©´, 128ê°ì ëì¼í ê° ëì ë°°ì´ì 모ë ë¸ëì ëí´ ë³í¨ìë íëì ê°ì í¬í¨í ê²ì
ëë¤.
ë§ì½ ìëí ë¹ì¨ì´ "k-rate"
ë¼ë©´, ë°°ì´ì íëì ê°ì í¬í¨í ê²ì¸ë°, ì´ë 128 íë ì ê°ê°ì ëí´ ì¬ì©ë ê²ì
ëë¤.
ì¬ì©ì ìì´ì í¸ì ë´ë¶ ë¡ì§ì´ ë
¸ë를 ëë ê²ì´ ìì íë¤ê³ ë¤ë¥´ê² íë¨í ì§ë¼ë AudioWorkletNode
를 íì±íë ì±ë¡ ì ì§íê² í ê²ì¸ì§ ë§ ê²ì¸ì§ë¥¼ ëíë´ë Boolean ê°.
ë°íë ê°ì íë¡ì¸ìê° AudioWorkletProcessor
ì ì´ê²ì ìì íë ë
¸ëì ìì 주기 ì ì±
ì ìí¥ì ë¼ì¹ ì ìê² í©ëë¤. ë§ì½ ë°í ê°ê³¼ ë
¸ë ìíì ì¡°í©ì´ ë¸ë¼ì°ì ë¡ íì¬ê¸ ë
¸ë를 ë©ì¶ê² ê²°ì íë¤ë©´, process()
ë ë¤ì í¸ì¶ëì§ ìì ê²ì
ëë¤.
true
를 ë°ííë ê²ì Web Audio APIê° ë
¸ë를 ê³ì ì´ë ¤ëê² íë ë°ë©´, false
를 ë°ííë ê²ì ë§ì½ ë
¸ëê° ìë¡ì´ ì¤ëì¤ ë°ì´í°ë¥¼ ìì±íë ê²ë ìëê³ ì²ë¦¬ëê³ ìë ì´ê²ì ì
ë ¥ì íµí´ ë°ì´í°ë¥¼ ë°ê³ ìë ê²ë ìëë¼ë©´ ë¸ë¼ì°ì ê° ë
¸ë를 ì ê±°í ì ìê² í©ëë¤.
ì¸ ê°ì§ ê°ì¥ íí ì íì ì¤ëì¤ ë ¸ëë:
AudioWorkletProcessor
ë ì´ê²ì´ ì¶ë ¥ì ìì°íë í process
ë©ìëìì true
를 ë°íí´ì¼ í©ëë¤. ì´ ë©ìëë ì´ê²ì´ ë ì´ì ì¶ë ¥ì ìì°íì§ ìì ê²ì´ë¼ë ê²ì ìê² ëì§ë§ì false
를 ë°íí´ì¼ í©ëë¤. ììë¡, AudioBufferSourceNode
를 ìê°í´ ë³´ììì¤ â ì´ë° ë
¸ë ë¤ì íë¡ì¸ìë ë²í¼ê° ì¬ìëë ëì process
ë©ìëìì true
를 ë°íí´ì¼ íê³ , ë²í¼ ì¬ìì´ ëë¬ì ë false
ë°íì ììí´ì¼ í©ëë¤ (ê°ì AudioBufferSourceNode
ìì ë¤ì play
를 í¸ì¶í ë°©ë²ì ììµëë¤).process
ë©ìëìì false
를 ë°íí´ì¼ í©ëë¤. ì´ ëìì íë ë
¸ëì ììë GainNode
ì
ëë¤. ì°ê²°ë ì
ë ¥ê³¼ ì ì§ëë ì°¸ì¡°ê° ìì´ì§ìë§ì, gainì ë ì´ì 무ììë ì ì©ëì§ ìì ì ìì¼ë¯ë¡, ì´ê²ì ìì íê² garbage-collected ë ì ììµëë¤.process
ë©ìëìì, 0ê°ì ì±ëì í¬í¨íë ì
ë ¥ì´ ë°ê²¬ëìë§ì ììíë©°, tail-time ì ê¸°ê° ëì true
를 ë°íí´ì¼ í©ëë¤.ì°¸ê³ :
return
문ì ë¶ì¬ë ì´ ë©ìëê° undefined
를 ë°íí ê²ìì ì미íê³ , ì´ê²ì falsy ê°ì´ë¯ë¡, ì´ê²ì false
를 ë°ííë ê²ê³¼ë ê°ìµëë¤. ëª
ìì ì¸ return
문ì ëë½íë ê²ì ì¬ë¬ë¶ì ë
¸ëìì ê°ì§í기 ì´ë ¤ì´ 문ì 를 ì¼ê¸°í ìë ììµëë¤.
process()
ë©ìëë ì ì ì ìí´ êµ¬íëë¯ë¡, ì´ê²ì ì무 ê²ì´ë ë°ììí¬ ì ììµëë¤. ë§ì½ uncaught errorê° ë°ìëë¤ë©´, ë
¸ëë onprocessorerror
ì´ë²¤í¸ë¥¼ ë°ììí¬ ê²ì´ê³ ì´ê²ì ìì 주기ì ëë¨¸ì§ ëì 무ìì ì¶ë ¥í ê²ì
ëë¤.
ì´ ìì ìì ì°ë¦¬ë íë¡ì¸ìì 첫ë²ì§¸ ì¶ë ¥ì ë°±ìììì ì¶ë ¥íë AudioWorkletProcessor
를 ìì±í ê²ì
ëë¤. gainì customGain
íë¼ë¯¸í°ì ìí´ ì ì´ë ì ììµëë¤.
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",
},
];
}
}
ëª
ì¸ì ë¸ë¼ì°ì í¸íì±
ë¸ë¼ì°ì ìì ì ê³µíë ë©ìëê° ìëë¼ í´ë¼ì´ì¸í¸ ì½ëë¡ ìì±í´ì¼ íë ì½ë°± ë©ìëì ëë¤.
ê°ì´ 보기RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4