AudioWorkletProcessor
ã®æ´¾çã¯ã©ã¹ã® process()
ã¡ã½ããã¯ãé³å£°å¦çå¨ã¯ã¼ã¯ã¬ããã®é³å£°å¦çã¢ã«ã´ãªãºã ãå®è£
ãã¾ãã
ãã®ã¡ã½ãã㯠AudioWorkletProcessor
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ã¯å«ã¾ãã¦ãã¾ããããAudioWorkletProcessor
ã®å®è£
ã¯ãã¹ã¦ process()
ã¡ã½ãããç¨æããªããã°ããã¾ããã
ãã®ã¡ã½ããã¯ãå¦çå¨ã®å¯¾å¿ãã AudioWorkletNode
ã«é³å£°ããã㯠(rendering quantum ã¨ãå¼ã°ãã) ãéããã¦ãããã³ã«ãé³å£°ã¬ã³ããªã³ã°ã¹ã¬ããããåæã§å¼ã°ãã¾ãã ããªãã¡ãæ°ããé³å£°ãããã¯ãå¦çå¨ã§å¦çå¯è½ã«ãªããã³ã«ãå¦çãããããã« process()
颿°ãå¼ã°ãã¾ãã
ã¡ã¢: ç¾å¨ãé³å£°ãã¼ã¿ãããã¯ã®é·ãã¯å¸¸ã« 128 ãã¬ã¼ã ã§ããããªãã¡ãå ¥åã®ããããã®ãã£ã³ãã«ã«ã¤ã㦠128 åã® 32 ãããæµ®åå°æ°ç¹æ°ã®ãµã³ãã«ãæ ¼ç´ããã¦ãã¾ãããããããã®ä»æ§ã夿´ããç¶æ³ã«å¿ã㦠(ãã¨ãã°ãé³å£°ãã¼ãã¦ã§ã¢ã CPU ã®ä½¿ç¨ã®å¹çããããã¯ãµã¤ãºã大ããããã¨ä¸ããå ´å) é³å£°ãããã¯ã®ãµã¤ãºãå¤ãããã¨ãã§ããããã«ããè¨ç»ããã§ã«é²è¡ä¸ã§ãããã®ãããç¹å®ã®ãµã¤ãºãä»®å®ããã®ã§ã¯ãªãã常ã«ãµã³ãã«é åã®ãµã¤ãºããã§ãã¯ããªããã°ãªãã¾ããã
ãã®ãµã¤ãºã¯æéã¨ã¨ãã«å¤ãããã¨ã許ãããå¯è½æ§ãããã®ã§ãæåã®ãããã¯ã ããè¦ã¦ãµã³ãã«ãããã¡ã¼ã®ãµã¤ãºã常ã«åãã ã¨ä»®å®ãã¦ã¯ããã¾ããã
æ§æprocess(inputs, outputs, parameters)
弿°
inputs
ãã¼ãã«æ¥ç¶ããã¦ãã å
¥å ã®é
åã§ãããã®é
åã®ããããã®è¦ç´ 㯠ãã£ã³ãã« ã®é
åã§ããããããã® ãã£ã³ã㫠㯠128 åã®ãµã³ãã«ãå
¥ã£ã Float32Array
ã§ãããã¨ãã°ãinputs[n][m][i]
㯠n
çªç®ã®å
¥åã® m
çªç®ã®ãã£ã³ãã«ã® i
çªç®ã®ãµã³ãã«ã«ã¢ã¯ã»ã¹ãã¾ãã
ããããã®ãµã³ãã«ã®å¤ã¯ [-1 .. 1]
ã®ç¯å²ã§ãã
å
¥å ã®æ°ãããã¦ãããåæ ãããã®é
åã®é·ãã¯ãã¼ãã®çææã«åºå®ããã¾ãã(AudioWorkletNode
ãåç
§ãã¦ãã ãã) ãã¼ãã® n
çªç®ã®å
¥åã«æ´»åä¸ã®ãã¼ããæ¥ç¶ããã¦ããªãå ´åã¯ãinputs[n]
ã¯ç©ºã®é
åã«ãªãã¾ãã(0 åã®å
¥åãã£ã³ãã«ãå©ç¨å¯è½ã§ã)
åå
¥åã® ãã£ã³ãã« ã®æ°ã¯ channelCount
ããã³ channelCountMode
ããããã£ã«ãã£ã¦å¤åããå¯è½æ§ãããã¾ãã
outputs
åºå ã®é
åã§ã弿° inputs
ã¨ä¼¼ãæ§é ã§ããprocess()
ã¡ã½ããã®å®è¡æã«å¤ãå
¥ãããããã¨ãæå³ãã¦ãã¾ããååºåãã£ã³ãã«ã¯ã¼ãã§åæåããã¾ããããªãã¡ãåºåã®é
åã夿´ããªãå ´åã¯å¦çå¨ã¯ç¡é³ãåºåãã¾ãã
parameters
æååã®ãã¼ã¨ Float32Array
ã®å¤ãæã¤ãªãã¸ã§ã¯ãã§ããparameterDescriptors
ã²ãã¿ã¼ã§å®ç¾©ããç¬èªã® AudioParam
ããããã«ã¤ãã¦ãname
ããã®ãªãã¸ã§ã¯ãã®ãã¼ã¨ãªããå¤ã Float32Array
ã¨ãªãã¾ããé
åã«æ ¼ç´ããå¤ã¯ãã¹ã±ã¸ã¥ã¼ã«ãããèªååã¤ãã³ããèæ
®ãã¦è¨ç®ããã¾ãã
ãã©ã¡ã¼ã¿ã¼ã®èªååã¬ã¼ãã "a-rate"
ã®å ´åã¯ãé
åã«ã¯ 128 åã®å¤ãæ ¼ç´ãããç¾å¨ã®é³å£°ãããã¯ã®ããããã®ãã¬ã¼ã ã«å¤ã 1 åãã¤å¯¾å¿ãã¾ããç¾å¨ã®ãããã¯ã表ãæéä¸ã«èªååãè¡ããã¦ããªãå ´åã¯ãåãå¤ã 128 åæ ¼ç´ãããããã«ããããã¯å
¨ä½ã§å¤ãããªã 1 åã®å¤ãæ ¼ç´ããããã¨ãããã¾ãã
èªååã¬ã¼ãã "k-rate"
ã®å ´åã¯ãé
åã«ã¯ 1 åã®å¤ãæ ¼ç´ããããã®å¤ã 128 åã®ãã¬ã¼ã ããããã§ç¨ãã¾ãã
ã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã®å
é¨ãã¸ãã¯ããã¼ããã·ã£ãããã¦ã³ãã¦ãå®å
¨ã ã¨å¤æãã¦ã AudioWorkletNode
ã®æ´»åãç¶ãããã表ã boolean
å¤ãè¿ãã¾ãã
ãã®è¿å¤ã«ãããå¦çå¨ã AudioWorkletProcessor
ã¨ãããææãããã¼ãã®çåæéããªã·ã¼ãå¶å¾¡ãããã¨ãã§ãã¾ãããã©ã¦ã¶ã¼ãè¿å¤ã¨ãã¼ãã®ç¶æ
ã«åºã¥ãã¦ãã¼ãã忢ããã¨å¤æããã¨ãprocess()
ã¯å¼ã°ããªããªãã¾ãã
true
ãè¿ããã¨ã§ãã¦ã§ããªã¼ãã£ãª API ã«ãã®ãã¼ãã®æ´»åãç¶ç¶ããããã¨ãã§ãã¾ãã false
ãè¿ãã¨ãæ°ããé³å£°ãã¼ã¿ã®çæããå¦çä¸ã®å
¥åããã®ãã¼ã¿ã®åå¾ããã¦ããªãã¨ãããã©ã¦ã¶ã¼ããã¼ããçµäºããããã¨ãã§ããããã«ãªãã¾ãã
æãããã¿ãããé³å£°ãã¼ãã®ç¨®é¡ã¨ãã¦ã以ä¸ã® 3 種é¡ãããã¾ãã
AudioWorkletProcessor
ã§ã¯ãåºåãçæãã¦ããéã¯ãã£ã¨ process
ã¡ã½ãã㯠true
ãè¿ãã¹ãã§ããããåºåãçæããªãã¨ãããã¨ãããã£ããããã®ã¡ã½ããã¯ã§ããã ãããã« false
ãè¿ãã¹ãã§ãããã¨ãã°ãAudioBufferSourceNode
ãèãã¦ã¿ã¾ãããããã®ç¨®é¡ã®ãã¼ãã®ããã®å¦çå¨ã¯ããããã¡ã¼ã®åçä¸ã¯ process
ã¡ã½ãã㯠true
ãè¿ãããããã¡ã¼ã®åçãçµãã£ãã false
ãè¿ãå§ããã¹ãã§ãã(åã AudioBufferSourceNode
ã§åã³ play
ãå¼ã¶ãã¨ã¯ã§ãã¾ãã)process
ã¡ã½ãã㯠false
ãè¿ãã¹ãã§ãããã®æåããããã¼ãã®ä¾ã¯ GainNode
ã§ããæ¥ç¶ããã¦ããå
¥åãç¡ããªã£ãããããåç
§ã¯æ®ã£ã¦ãã¦ããã²ã¤ã³ãé©ç¨ãã対象ãç¡ãã®ã§ãå®å
¨ã«ã¬ãã¼ã¸ã³ã¬ã¯ãã®å¯¾è±¡ã«ã§ãã¾ããprocess
ã¡ã½ãã㯠true
ãè¿ãã¹ãã§ãããã®ãããªãã¼ãã®ä¾ã¯ DelayNode
ã§ãããã®ãã¼ãã«ã¯ delayTime
ããããã£ã«çãã ãã¼ã«ã¿ã¤ã ãããã¾ããã¡ã¢: return
æãç¡ãå ´åãã¡ã½ãã㯠undefined
ãè¿ããã¨ã«ãªãã¾ããããã¯å½ã¨è§£éãããå¤ãªã®ã§ãfalse
ãè¿ãã®ã¨åã广ãããã¾ãã æç¤ºç㪠return
æãçç¥ããã¨ããã¼ããè¦ã¤ãã«ããåé¡ãèµ·ããå¯è½æ§ãããã¾ãã
process()
ã¡ã½ããã¯ã¦ã¼ã¶ã¼ãå®è£
ããã®ã§ãä»»æã®ä¾å¤ãæãããã¨ãã§ãã¾ãã è£è¶³ãããªãã¨ã©ã¼ãæããããå ´åã¯ããã¼ã㯠processorerror
ã¤ãã³ããçæãããã®å¾ãã£ã¨ç¡é³ãåºåãã¾ãã
ãã®ä¾ã§ã¯ãæåã®åºåã¨ãã¦ãã¯ã¤ããã¤ãºãåºåãã AudioWorkletProcessor
ã使ãã¾ããã²ã¤ã³ã¯ customGain
ãã©ã¡ã¼ã¿ã¼ã§å¶å¾¡ã§ãã¾ãã
class WhiteNoiseProcessor extends AudioWorkletProcessor {
process(inputs, outputs, parameters) {
// æåã®åºåãåå¾ãã
const output = outputs[0];
// åãã£ã³ãã«ã«ã©ã³ãã å¤ã«ã²ã¤ã³ãæãããã®ãå
¥ãã
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]);
}
});
// ããã¯èªèº«ã§åºåãçæãã鳿ºãã¼ããªã®ã§ã
// ã¡ã¤ã³ã¹ã¬ããããåç
§ããã¦ããªãã¦ãã
// ééã£ã¦ã¬ãã¼ã¸ã³ã¬ã¯ããããªãããã« 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