ç¬èªã® AudioParam
ã®ä½æã¨ä½¿ç¨ã®ãã¢ãè¡ããããAudioWorkletNode
ãã¼ã¸ã«ããä¾ãæ¡å¼µãã¾ãããã®ãã¼ã¸ã§ã¯ããã¯ã¤ããã¤ãºãåºåããåç´ãªãã¼ãã使ãã¾ãããããã§ã¯ãç¬èªã®ã²ã¤ã³ãã©ã¡ã¼ã¿ã¼ã追å ããåºåã®é³éãç´æ¥å¤ãããã¨ãã§ããããã«ãã¾ãã(ãã㯠GainNode
ãç¨ãã¦ãã§ãã¾ãã)
ã¾ããç¬èªã® AudioWorkletProcessor
ãå®ç¾©ãã¦ç»é²ããå¿
è¦ãããã¾ãã ããã¯å¥ã®ãã¡ã¤ã«ã§è¡ããã¨ã«æ³¨æãã¦ãã ããã
å¦çå¨ãæ¡å¼µããéç㪠parameterDescriptors
ã²ãã¿ã¼ã追å ãã¾ãããã㯠AudioWorkletNode
ã®ã³ã³ã¹ãã©ã¯ã¿ã¼å
é¨ã§ parameters
ã«çæãã AudioParam
ãªãã¸ã§ã¯ããå
¥ããã®ã«ç¨ãããã¾ãã
// white-noise-processor.js
class WhiteNoiseProcessor extends AudioWorkletProcessor {
static get parameterDescriptors() {
return [
{
name: "customGain",
defaultValue: 1,
minValue: 0,
maxValue: 1,
automationRate: "a-rate",
},
];
}
process(inputs, outputs, parameters) {
const output = outputs[0];
output.forEach((channel) => {
for (let i = 0; i < channel.length; i++) {
channel[i] =
(Math.random() * 2 - 1) *
(parameters["customGain"].length > 1
? parameters["customGain"][i]
: parameters["customGain"][0]);
// ã¡ã¢: ãã©ã¡ã¼ã¿ã¼ã¯ 128 åã®å¤ã®é
åã§ãã(128 ãµã³ãã«ã®ããããã«ã¤ã㦠1 åãã¤)
// ãã ããç¾å¨èªåå¦çãã¹ã±ã¸ã¥ã¼ã«ããã¦ããªãå ´åã
// 128 ãµã³ãã«å
¨ã¦ã§ç¨ããå¤ã 1 åã ãå
¥ã£ã¦ãããã¨ãããã¾ãã
}
});
return true;
}
}
registerProcessor("white-noise-processor", WhiteNoiseProcessor);
次ã«ãã¡ã¤ã³ã¹ã¯ãªããã§å¦çå¨ãèªã¿è¾¼ã¿ãå¦çå¨ã®ååãæ¸¡ã㦠AudioWorkletNode
ã®ã¤ã³ã¹ã¿ã³ã¹ã使ãããã®ãã¼ããé³å£°ã°ã©ãã«æ¥ç¶ãã¾ãã
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("white-noise-processor.js");
const whiteNoiseNode = new AudioWorkletNode(
audioContext,
"white-noise-processor",
);
whiteNoiseNode.connect(audioContext.destination);
ããã¨ããã¼ãã®ã²ã¤ã³ããã®ããã«ãã¦å¤ãããã¨ãã§ãã¾ãã
const gainParam = whiteNoiseNode.parameters.get("customGain");
gainParam.setValueAtTime(0, audioContext.currentTime);
gainParam.linearRampToValueAtTime(0.5, audioContext.currentTime + 0.5);
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