Baseline Widely available
createMediaStreamSource()
㯠AudioContext
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã§ãæå®ã®ã¡ãã£ã¢ã¹ããªã¼ã ããï¼è¨ãæãã㨠navigator.getUserMedia
ã¤ã³ã¹ã¿ã³ã¹ããï¼ MediaStreamAudioSourceNode
ãªãã¸ã§ã¯ããçæãã¾ããããããã®é³å£°ã¯åçãç·¨éãã§ãã¾ãã
ã¡ãã£ã¢ã¹ããªã¼ã ã®é³å£°ã½ã¼ã¹ãã¼ãã®è©³ç´°ã¯MediaStreamAudioSourceNode
ã®ãã¼ã¸ãåç
§ãã¦ãã ããã
createMediaStreamSource(stream)
弿°
stream
æä½ã®ããã«é³å£°ã°ã©ãã«å ããã MediaStream
ãªãã¸ã§ã¯ãã
æå®ããã½ã¼ã¹ã¹ããªã¼ã ããåå¾ããã¡ãã£ã¢ãæã¤é³å£°ãã¼ããè¡¨ãæ°ãã MediaStreamAudioSourceNode
ãªãã¸ã§ã¯ãã§ãã
ãã®ä¾ã§ã¯ãã¡ãã£ã¢ï¼é³å£°ï¼æ åï¼ã¹ããªã¼ã ã navigator.getUserMedia
ããç²å¾ããããã <video>
è¦ç´ ã«æ¸¡ããæ åã¯åçãã¾ããé³å£°ã¯åçããªãããã«ãã¾ããé³å£°ã¯ MediaStreamAudioSourceNode
ã«æ¸¡ãã¾ããæ¬¡ã«ãé³å£°ããã¼ãã¹ãã£ã«ã¿ã¼ BiquadFilterNode
ï¼ä½é³ãå¼·ããããã«åãã¾ãï¼ã«æ¸¡ãããã㦠AudioDestinationNode
ã«æ¸¡ãã¾ãã
<video>
è¦ç´ ã®ä¸ã®ã¹ã©ã¤ãã¼ã¯ãã¼ãã¹ãã£ã«ã¿ã¼ã®å¢å¹
éãæä½ãã¾ãâã¹ã©ã¤ãã¼ã§å¤ã大ããããã¨ãããä½é³ãå¼·ããªãã¾ãã
ã¡ã¢: ãã®ä¾ã®å®è¡ã¨ã½ã¼ã¹ã®é²è¦§ãã§ãã¾ãã
const pre = document.querySelector("pre");
const video = document.querySelector("video");
const myScript = document.querySelector("script");
const range = document.querySelector("input");
// getUserMediaã®ããã㯠- ã¹ããªã¼ã ãå¾ã
// MediaStreamAudioSourceNodeã«æ¸¡ã
// æ åã¯videoè¦ç´ ã«åºåãã
if (navigator.mediaDevices) {
console.log("getUserMedia supported.");
navigator.mediaDevices
.getUserMedia({ audio: true, video: true })
.then((stream) => {
video.srcObject = stream;
video.onloadedmetadata = (e) => {
video.play();
video.muted = true;
};
// MediaStreamAudioSourceNode ãçæãã
// ããã« HTMLMediaElement ãæ¸¡ã
const audioCtx = new AudioContext();
const source = audioCtx.createMediaStreamSource(stream);
// äºæ¬¡ãã£ã«ã¿ã¼ãçæãã
const biquadFilter = audioCtx.createBiquadFilter();
biquadFilter.type = "lowshelf";
biquadFilter.frequency.value = 1000;
biquadFilter.gain.value = range.value;
// AudioBufferSourceNode ã gainNode ã«ã
// ãã㦠gainNode ã destination ã«æ¥ç¶ãã
// ããã§ãã¦ã¹ãåãããã¨ã§é³æ¥½ã®ããªã¥ã¼ã ã調æ´ãããã¨ãã§ãã
source.connect(biquadFilter);
biquadFilter.connect(audioCtx.destination);
// ãã¦ã¹ãåããã¨ãæ°ãã座æ¨ãå¾ã
// ããã¦å¢å¹
éãæ´æ°ãã
range.oninput = () => {
biquadFilter.gain.value = range.value;
};
})
.catch((err) => {
console.log(`The following gUM error occurred: ${err}`);
});
} else {
console.log("getUserMedia not supported on your browser!");
}
// pre è¦ç´ ã«ã¹ã¯ãªãããæ¸ãåºã
pre.innerHTML = myScript.innerHTML;
ã¡ã¢: createMediaStreamSource()
ãå¼ã³åºããçµæãã¡ãã£ã¢ã¹ããªã¼ã ããã®é³å£°åç㯠AudioContext
ã®å¦çã°ã©ãã«åã«ã¼ãã£ã³ã°ããã¾ãããã®ãããã¹ããªã¼ã ã®åç/䏿忢ã¯ãã¡ãã£ã¢è¦ç´ API ã¨ãã¬ã¼ã¤ã¼ã³ã³ããã¼ã«ãéãã¦è¡ããã¨ãã§ãã¾ãã
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