å®å ¨ãªã³ã³ããã¹ãç¨: ãã®æ©è½ã¯ä¸é¨ã¾ãã¯ãã¹ã¦ã®å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã«ããã¦ãå®å ¨ãªã³ã³ããã¹ã (HTTPS) ã§ã®ã¿å©ç¨ã§ãã¾ãã
Experimental: ããã¯å®é¨çãªæ©è½ã§ãã
æ¬çªã§ä½¿ç¨ããåã«ãã©ã¦ã¶ã¼äºææ§ä¸è¦§è¡¨ããã§ãã¯ãã¦ãã ããã
Audio Output Devices API ã«ãããã¦ã§ãã¢ããªã±ã¼ã·ã§ã³ãã¦ã¼ã¶ã¼ã«é³å£°ã®åçã«ç¨ããåºåããã¤ã¹ã鏿ããããã¨ãã§ãã¾ãã
æ¦å¿µã¨ä½¿ç¨æ³ãªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã«ã¯ãã¦ã¼ã¶ã¼ãé³å£°ãã¹ãã¼ã«ã¼ããåçããããBluetooth ãããã»ããããåçãããããããã¯ä»ã®é³å£°åºåããã¤ã¹ããåçããããé¸ã¶ãã¨ãã§ããæ©è½ããããã®ãå¤ãã§ãã ãã® API ã¯ãã¦ã§ããã¼ã¸å ã§ã¢ããªã±ã¼ã·ã§ã³ãåæ§ã®æ©è½ãæä¾ãããã¨ãå¯è½ã«ãã¾ãã
権éããªã·ã¼ã§è¨±å¯ããã¦ããå ´åã§ããã¦ã¼ã¶ã¼ã¯ä¸é¨ã®åºåããã¤ã¹ããé³å£°ãåçããã¹ãã§ã¯ãªãå ´æã«å± ãå¯è½æ§ãããã®ã§ãç¹å®ã®é³å£°åºåããã¤ã¹ã¸ã®ã¢ã¯ã»ã¹ã«ã¯æç¤ºçãªã¦ã¼ã¶ã¼ã®è¨±å¯ãå¿ è¦ã§ãã
ãã® API ã¯ãããã¥ã¡ã³ãã® Permissions-Policy
HTTP ãããã¼ã® speaker-selection
ãã£ã¬ã¯ãã£ãã«ãã£ã¦è¨±å¯ããã¦ããå ´åãã¦ã¼ã¶ã¼ã叿ããé³å£°åºåããã¤ã¹ã鏿ã§ããããã«ãã MediaDevices.selectAudioOutput()
ã¡ã½ãããæä¾ãã¾ãã ããã«ãã鏿ãããããã¤ã¹ã¯ã¦ã¼ã¶ã¼ã®è¨±å¯ãå¾ãããã®ã§ãMediaDevices.enumerateDevices()
ã«ããåæããããHTMLMediaElement.setSinkId()
ã«ããé³å£°åºåããã¤ã¹ã¨ãã¦è¨å®ãããã§ããããã«ãªãã¾ãã
é³å£°ããã¤ã¹ã¯ãèªç±ã«æ¥ç¶ãããåæãããã§ãã¾ãã ãã®ãããªå¤åã«å¯¾å¿ãããã¢ããªã±ã¼ã·ã§ã³ã¯ãdevicechange
ã¤ãã³ããç£è¦ããenumerateDevices()
ãç¨ã㦠sinkId
ãè¿ãããããã¤ã¹ã«å«ã¾ãã¦ããããå¤å®ã§ãã¾ãã ããã«ããããã¨ãã°ãåçã忢ãããåéãããã§ãã¾ãã
Audio Output Devices API ã¯ä»¥ä¸ã® API ãæ¡å¼µãã以ä¸ã®æ©è½ã追å ãã¾ãã
MediaDevicesMediaDevices.selectAudioOutput()
ãã®ã¡ã½ããã¯ãã¦ã¼ã¶ã¼ã«ç¹å®ã®é³å£°åºåããã¤ã¹ããã¨ãã°ã¹ãã¼ã«ã¼ããããã»ããã鏿ããã¾ãã ããã¤ã¹ã鏿ããã¨ããã®ããã¤ã¹ã使ç¨ããã¦ã¼ã¶ã¼ã®è¨±å¯ãå¾ãããID ãå«ããã®ããã¤ã¹ã®æ å ±ãè¿ãã¾ãã
HTMLMediaElement.setSinkId()
ãã®ã¡ã½ããã¯ãåºåç¨ã®é³å£°ããã¤ã¹ã® ID ãè¨å®ãã許å¯ãå¾ããã¦ããã°ãã®ããã¤ã¹ã使ç¨ããããã«ãã¾ãã
HTMLMediaElement.sinkId
ãã®ããããã£ã¯åºåã«ä½¿ç¨ããã¦ããé³å£°ããã¤ã¹ã®ä¸æãª ID ãè¿ãã¾ããããã©ã«ãã®ã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãããã¤ã¹ã使ç¨ããã¦ããå ´åã¯ç©ºæååãè¿ãã¾ãã
ãã® API ã¸ã®ã¢ã¯ã»ã¹ã¯ã以ä¸ã®å¶éãåãã¾ãã
å ¨ã¦ã®ã¡ã½ãããããããã£ã¯ä¿è·ãããã³ã³ããã¹ãã§ã®ã¿å¼ã³ã ãã¾ãã
MediaDevices.selectAudioOutput()
ã¯ã¦ã¼ã¶ã¼ãã鏿ãããããã¤ã¹ãé³å£°ã®åºåå
ã¨ãã¦ä½¿ç¨ãã許å¯ãå¾ã¾ãã
speaker-selection
ã«ããå¶éãããå¯è½æ§ãããã¾ããHTMLMediaElement.setSinkId()
ã¯è¨±å¯ããã ID ãé³å£°ã®åºåå
ã¨ãã¦è¨å®ãã¾ãã
speaker-selection
ã«ããå¶éãããå¯è½æ§ãããã¾ããMediaDevices.selectAudioOutput()
ã«ãã£ã¦éãããã³ããã§é¸æãããã¨ã§å¾ããã¾ããMediaDevices.getUserMedia()
ã«ããæ¢ã«åãã°ã«ã¼ãã®ã¡ãã£ã¢å
¥åããã¤ã¹ã使ç¨ãããã¨ã許å¯ãã¦ããå ´åãåºåããã¤ã¹ã使ç¨ãã許å¯ãæé»çã«å¾ããã¾ãã許å¯ã®ç¶æ
ã¯ã権é API ã® navigator.permissions.query()
ã« speaker-selection
権éãå«ã permissionDescriptor
ãæ¸¡ããã¨ã§åå¾ã§ãã¾ãã
ããã¯ããã¿ã³ã®ã¯ãªãã¯ã«ããå¼ã³åºããã颿°ã®ä¸ã§ selectAudioOutput()
ãç¨ãã鏿ãããããã¤ã¹ãé³å£°ã®åºåå
ã«è¨å®ããä¾ã§ãã
ãã®ã³ã¼ãã¯ãã¾ã selectAudioOutput()
ã«å¯¾å¿ãã¦ãããã確èªãã¾ãã対å¿ãã¦ããå ´åããããç¨ãã¦åºåå
ã鏿ããããã¤ã¹ ID ãè¿ãã¾ãã ããã¦ãé³å£°ãããã©ã«ãã®åºåå
ãç¨ãã¦åçããsetSinkId()
ãå¼ã³åºãã¦åºåå
ã鏿ãããããã¤ã¹ã«åãæ¿ãã¾ãã
document.querySelector("#myButton").addEventListener("click", async () => {
if (!navigator.mediaDevices.selectAudioOutput) {
console.log(
"selectAudioOutput() ã«æªå¯¾å¿ããä¿è·ãããã³ã³ããã¹ãã§ã¯ããã¾ããã",
);
return;
}
// ããã¤ã¹ã鏿ããããã®ããã³ããã表示ãã
const audioDevice = await navigator.mediaDevices.selectAudioOutput();
// audio è¦ç´ ã使ããããã©ã«ãã®ããã¤ã¹ã§é³å£°ã®åçãéå§ãã
const audio = document.createElement("audio");
audio.src = "https://example.com/audio.mp3";
audio.play();
// åºåå
ã鏿ãããé³å£°åºåããã¤ã¹ã«åãæ¿ãã
audio.setSinkId(audioDevice.deviceId);
});
åºåã®è©³ç´°ãè¨é²ããã¨ããã¨ãã°ä»¥ä¸ã®åºåãå¾ããã¾ãã
console.log(
`${audioDevice.kind}: ${audioDevice.label} id = ${audioDevice.deviceId}`,
);
// audiooutput: Realtek Digital Output (Realtek(R) Audio) id = 0wE6fURSZ20H0N2NbxqgowQJLWbwo+5ablCVVJwRM3k=
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ api.MediaDevices.selectAudioOutput api.HTMLMediaElement.setSinkId api.HTMLMediaElement.sinkId
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