強制 javascript 使用非預設聲音設備

強制 javascript 使用非預設聲音設備

我試圖強制透過 javascript 播放音訊的單一頁面使用與瀏覽器的其餘部分(實際上與系統的其餘部分)不同的聲卡。我目前的理解是瀏覽器不會直接存取聲卡接收器,而是委託給想要播放音訊的插件。理論上,這應該可以讓 javascript 可以使用與 flash 或任何其他插件不同的聲音接收器。究竟是否可能...

請注意,這並不是為了分發,我只是嘗試透過控制台或類似方式更改一台電腦上的輸出。

答案1

這是未來,現在是可能的!您可以deviceId使用該mediaDevices.enumerateDevices函數收集可用的輸出。然後將您想要的應用deviceIdAudio元素上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透過設定聲音srcsrcObject欄位來應用一些聲音。

相關代碼筆: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應用程式。

類似問題更改 Firefox 中的音訊輸出設備

相關內容