我試圖強制透過 javascript 播放音訊的單一頁面使用與瀏覽器的其餘部分(實際上與系統的其餘部分)不同的聲卡。我目前的理解是瀏覽器不會直接存取聲卡接收器,而是委託給想要播放音訊的插件。理論上,這應該可以讓 javascript 可以使用與 flash 或任何其他插件不同的聲音接收器。究竟是否可能...
請注意,這並不是為了分發,我只是嘗試透過控制台或類似方式更改一台電腦上的輸出。
答案1
這是未來,現在是可能的!您可以deviceId
使用該mediaDevices.enumerateDevices
函數收集可用的輸出。然後將您想要的應用deviceId
到Audio
元素上setSinkId
const devices = await navigator.mediaDevices.enumerateDevices();
const outputs = devices.filter(({ kind }) => kind === 'audiooutput');
const output = outputs[1]; // Choose a device
const audio = new Audio();
audio.setSinkId(output.deviceId);
audio.play();
剩下的就是audio
透過設定聲音src
或srcObject
欄位來應用一些聲音。
相關代碼筆:https://codepen.io/smujmaiku/pen/oNjBmVj
注意:audio.play()
首先需要一些使用者互動。
另外:檢查你的標誌https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId
答案2
不可能的。也許在未來,但現在的 Safari、Chrome、FireFox、Opera 和其他瀏覽器甚至在「設定/首選項」中都沒有選項來更改它。如您所知,javascript 在互聯網瀏覽器中工作,並且能夠完成它們(互聯網瀏覽器)可以做的事情。
現在我認為有機會用 Node.js 來改變這個,因為你可以編寫一個包/核心鉤子/外部模組,並能夠用 JavaScript 以某種方式改變它,但改變聲卡的效果將只在伺服器上使用Node. js + 你的模組作為客戶端。
如果您想更改此設定(除此之外您無法使用 javascript 和網路瀏覽器),您可以使用虛擬音訊線http://en.wikipedia.org/wiki/Virtual_Audio_Cable這是一個Windows應用程式。