AudioParam: setTargetAtTime() ã¡ã½ãã
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
setTargetAtTime() 㯠AudioParam ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã§ã AudioParam ã®å¤ãå¾ã
ã«å¤åãããéå§ãã¹ã±ã¸ã¥ã¼ã«ãã¾ãããã㯠ADSR ã¨ã³ããã¼ãã®ãã£ã±ã¤ããªãªã¼ã¹é¨åã«ä½¿ç¨ãã¾ãã
æ§æ
setTargetAtTime(target, startTime, timeConstant)
弿°
target-
æå®ãããéå§æå»ã«å¼æ°ãå¤åãå§ããå¤ã
startTime-
ææ°å¤åã®éå§æå»ã
AudioContext.currentTimeã¨åãæé座æ¨ç³»ã§æå®ãã¾ãããããAudioContext.currentTime以ä¸ã®å ´åã弿°ã¯ããã«å¤åãå§ãã¾ãã timeConstant-
ç§åä½ã§æå®ããããææ°é¢æ°çã«å¯¾è±¡ã¨ããææ³ã«ç§»è¡ããéã®æå»å®æ°å¤ããã®å¤ã大ããã»ã©ãé·ç§»ã¯é ããªãã¾ãã
è¿å¤
ãã® AudioParam ãªãã¸ã§ã¯ãã¸ã®åç
§ã§ãããã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®å¤ããã©ã¦ã¶ã¼ã®å®è£
ã®ä¸ã«ã¯ undefined ãè¿ããã®ãããã¾ãã
解説
å¤å㯠startTime ã§æå®ããæå»ããå§ã¾ããææ°é¢æ°çã« target 弿°ã§æå®ãããå¤ã«åãã£ã¦ç§»åãã¾ãã timeConstant 弿°ã§å®ç¾©ããã¦ãããã£ã±ã¤ã¬ã¼ãã¯ææ°é¢æ°çã§ãã ãããã£ã¦ãå¤ãå®å
¨ã« target ã«å°éãããã¨ã¯ããã¾ããããé·ã timeConstant ã®åã¿ã¤ã ã¹ãããã®å¾ãå¤ã¯å¥ã®å¼ ã§ target ã«è¿ã¥ãã¾ããå®å
¨ãªå¼ï¼ä¸æ¬¡ç·å½¢é£ç¶æä¸å¤ã·ã¹ãã ã使ç¨ãã¦ãã¾ãï¼ã«ã¤ãã¦ã¯ãã¦ã§ããªã¼ãã£ãª API 仿§æ¸ã調ã¹ã¦ãã ããã
ã©ããã¦ãç¹å®ã®æå»ã¾ã§ã«ç®æ¨å¤ã«å°éããå¿
è¦ãããå ´åã¯ã AudioParam.exponentialRampToValueAtTime() ã使ç¨ãããã¨ãã§ãã¾ãããã ããæ°å¦çãªçç±ããããã®ã¡ã½ããã¯ç¾å¨å¤ã対象ã¨ããå¤ã 0 ã®å ´åã«ã¯åä½ãã¾ããã
è¯ã timeConstant ã®é¸æ
åè¿°ã®ããã«ããã®å¤ã¯ææ°é¢æ°çã«å¤åãã timeConstant ãã¨ã« 63.2% ãã¤å¯¾è±¡ã¨ããå¤ã«åãã£ã¦å¤åãã¾ããç®æ¨å¤ã«éãããã¨ãå¿é
ããå¿
è¦ã¯ããã¾ãããååã«è¿ã¥ãã°ããã以ä¸ã®å¤åã¯äººéã®ãªã¹ãã¼ã«ã¯ç¥è¦ã§ããªãã§ãããã
使ç¨ããç¨éã«ãã£ã¦ã¯ã対象ã¨ããå¤ã® 95% ã«ãªãã°ååããããã¾ããããã®å ´åã¯ã timeConstant ã対象ã¨ããæéã® 3 åã® 1 ã«è¨å®ããã°ããã§ãããã
詳細ã«ã¤ãã¦ã¯ãæéã®çµéã¨ã¨ãã«å¤ã 0% ãã 100% ã¾ã§ã©ã®ããã«å¤åãããã以ä¸ã®è¡¨ã§èª¿ã¹ã¦ãã ããã
startTime ããã®æé |
å¤ |
|---|---|
0 * timeConstant |
0% |
0.5 * timeConstant |
39.3% |
1 * timeConstant |
63.2% |
2 * timeConstant |
86.5% |
3 * timeConstant |
95.0% |
4 * timeConstant |
98.2% |
5 * timeConstant |
99.3% |
n * timeConstant |
ä¾
ãã®ä¾ã§ã¯ã 2 ã¤ã®å¶å¾¡ãã¿ã³ãæã¤ã¡ãã£ã¢ã½ã¼ã¹ãããã¾ãï¼ã½ã¼ã¹ã³ã¼ã㯠audio-param repo ãåç
§ããããã¾ãã¯ãã®ä¾ãã©ã¤ãã§è¦ã¦ãã ããï¼ããããã®ãã¿ã³ãæ¼ãããã¨ã setTargetAtTime() ã使ç¨ãããããããã²ã¤ã³å¤ã 1.0 ã¾ã§ã 0 ã¾ã§ãã§ã¼ãã¢ããããã¾ãã
// é³å£°ã³ã³ããã¹ãã®ä½æ
const audioCtx = new AudioContext();
// ä¾ã®ããã®åºæ¬çãªå¤ãè¨å®
const myAudio = document.querySelector("audio");
const atTimePlus = document.querySelector(".at-time-plus");
const atTimeMinus = document.querySelector(".at-time-minus");
// MediaElementAudioSourceNode ã使
// Feed the HTMLMediaElement into it
const source = audioCtx.createMediaElementSource(myAudio);
// ã²ã¤ã³ãã¼ãã使ããã²ã¤ã³å¤ã 0.5 ã«è¨å®
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.5;
let currGain = gainNode.gain.value;
// AudioBufferSourceNode ã gainNodeã«ã
// gainNode ãåºåå
ã«æ¥ç¶
source.connect(gainNode);
gainNode.connect(audioCtx.destination);
// onclick ã§ä½ãããããã«ãã¿ã³ãè¨å®
atTimePlus.onclick = () => {
currGain = 1.0;
gainNode.gain.setTargetAtTime(1.0, audioCtx.currentTime + 1, 0.5);
};
atTimeMinus.onclick = () => {
currGain = 0;
gainNode.gain.setTargetAtTime(0, audioCtx.currentTime + 1, 0.5);
};
仿§æ¸
| 仿§æ¸ |
|---|
| Web Audio API > # dom-audioparam-settargetattime > |