【发布时间】:2021-11-14 10:00:53
【问题描述】:
我正在尝试制作一个脚本,该脚本从音频元素获取音频并同时在耳机和笔记本电脑扬声器上播放。 这可能吗?
这是我目前写的代码:
const outputs = (await navigator.mediaDevices.enumerateDevices()).filter(({ kind, deviceId }) => kind === 'audiooutput' && deviceId !== 'default' && deviceId !== 'communications' );
var players = [];
document.querySelectorAll('audio').forEach((y)=>{
players.push([]); let l = players.length-1;
outputs.forEach((x)=>{
if(players[l].length===0) players[l].push(y);
else {
let p = y.cloneNode();
p.srcObject = players[l][0].srcObject.clone();
players[l].push(p);
}
});
})
players.forEach((a)=>{
a.forEach((o, i)=>{
o.setSinkId(outputs[i].deviceId);
o.play();
})
})
此代码的问题在于它使音频仅在另一个扬声器上播放,而不是在两个扬声器上播放。
请注意,该窗口可以访问麦克风,因此我可以看到来自navigator.mediaDevices.enumerateDevices() 的所有设备。
该脚本主要用于 Edge 和 Chrome。
【问题讨论】:
-
虽然这可能是不可能的,但即使是这样我也不会这样做。您无法控制用户选择的音频输出,您也不应该控制。
-
这样做的目的是在不失真的情况下增加音频响度。我只使用耳机进行测试。现实世界的场景是使用笔记本电脑扬声器和外部 USB 扬声器。
-
不,你不能,用户在控制之中。
-
@Grumpy 你说的用户是什么意思?如果用户是我,我可以这样做吗?或者你的意思是js不能,只有用户可以手动(可能通过虚拟音频线)
-
用户在控制中,用户选择输出,因为它应该是。
标签: javascript html5-audio web-audio-api