如何以编程方式更改电子内部 Angular 中的音频输出设备?

Posted

技术标签:

【中文标题】如何以编程方式更改电子内部 Angular 中的音频输出设备?【英文标题】:How to programmatically change the audio output device in Angular inside Electron? 【发布时间】:2021-07-23 20:42:13 【问题描述】:

我正在使用 Angular 11 和 Electron 12 开发桌面应用程序。该应用程序必须能够发出声音,并且用户必须能够更改应用程序使用的音频输出设备。

所以,我尝试使用setSinkId WebRTC 实验功能。 Electron 使用支持此功能的 Chromium。因此,在 Electron webPreferences 中,我启用了 experimentalFeatures

现在,问题在于 Typescript (v4.2.3) 无法识别 setSinkId 功能。

我尝试在 Angular 组件中执行此操作:

但如您所见,我收到以下错误消息:

我知道,可能 Typescript 还不支持这个功能。 但是,如何在 Electron 中更改 Angular 中的音频输出设备?

【问题讨论】:

【参考方案1】:

特别是在为 Electron TypeScript 的默认类型开发应用程序时,这里并不是很有帮助。 setSinkId() 在 Chromium 中受支持,因此在 Electron 中也可用。

您可以通过显式添加 setSinkId() 的类型定义来帮助 TypeScript。

const audio = <htmlAudioElement &  setSinkId (deviceId: string): void > new Audio();

audio.setSinkId('the-id-of-the-device');

【讨论】:

顺便说一句,ESLint 告诉我使用as 而不是这个:const audio = new Audio() as HTMLAudioElement &amp; setSinkId (deviceId: string): void ; 我很高兴听到这个消息。 as 在技术上与 &lt;&gt; 语法相同。但它不能与 JSX 一起使用。只要你不使用 JSX,它只是一种风格选择。你甚至可以配置 eslint 来强制执行 &lt;&gt; 而不是 as。 github.com/typescript-eslint/typescript-eslint/blob/master/…

以上是关于如何以编程方式更改电子内部 Angular 中的音频输出设备?的主要内容,如果未能解决你的问题,请参考以下文章

Angular - 以编程方式提交表单

如何以编程方式重置或取消选中 Angular 中的单选按钮?

以编程方式修改 SipAddress

以编程方式在电子表格中设置边框颜色和样式

Angular2/material 2:当以编程方式更改值时,md-input-container 标签不会重置浮点数

如何在应用内购买功能中以编程方式更改产品价格?