使用网络音频 api 检查所选麦克风是不是已静音

Posted

技术标签:

【中文标题】使用网络音频 api 检查所选麦克风是不是已静音【英文标题】:Check if selected microphone is muted or not with web audio api使用网络音频 api 检查所选麦克风是否已静音 【发布时间】:2016-12-24 02:02:32 【问题描述】:

通过使用以下,我们可以提示用户选择他们喜欢的具有音频和视频源限制的媒体输入设备(目前只对 Chrome 支持感兴趣)。

navigator.mediaDevices.getUserMedia(audio: true)
  .then((stream) => 
    console.log(stream);
  );

有人知道是否有公开的 API 来检测用户选择的输入设备当前是否静音?输入设备可以是板载麦克风、外部麦克风或软件定义的麦克风,在系统中显示为硬件设备。

【问题讨论】:

【参考方案1】:

您可以通过迭代MediaStream .getAudioTracks() 方法返回的数组,或通过从数组中按索引选择MediaStreamTrack 来检查每个MediaStreamTrack 的属性.muted Boolean 值。

  navigator.mediaDevices.getUserMedia(audio: true)
  .then(stream => 
    console.log("MediaStreamTrack muted:", stream.getAudioTracks()[0].muted);
  )
  .catch(err => console.log(err));

您还可以利用muteunmute MediaStreamTrack 事件。

【讨论】:

这似乎并不能反映 Chrome 57 (Windows 10) 中麦克风的实际静音状态,即使在deviceId 选择特定的非Default 麦克风时也是如此。 @ChrisHunt contraintsvolume 属性也可以设置。见Capabilities, constraints, and settings。麦克风是如何静音的?你能描述如何重现案例吗?您是否已将onmuteonunmute 事件附加到MediaStreamTrack 首先在托盘 > 声音图标上下文菜单 > 录音设备 > 音频下识别启用的麦克风。使用navigator.mediaDevices.enumerateDevices() 标识具有相同标签的设备的deviceId。使用navigator.mediaDevices.getUserMedia( audio: deviceId: '...' ) 选择设备。验证track = stream.getTracks()[0] 与设备匹配并检查track.muted。通过“录音设备”对话框中特定设备的“级别”选项卡将麦克风静音。检查track.muted,看看它没有改变。 Tray 在哪里? DevTools?没有尝试过 chrome 57。不知道 chrome 57 可用。在 chromium 52 上试过。如果你录制流,录制的流的播放是否静音? @ChrisHunt 您是否找到了从操作系统获取实际静音状态的解决方案?我已成功重现您的问题。

以上是关于使用网络音频 api 检查所选麦克风是不是已静音的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Auriotouch 将麦克风的音频输入静音并仅识别设备的内部音频

使用 NAudio 录制音频并在麦克风输入静音时写入文件

检查系统音量是不是静音

FFmpeg 检查音频通道是不是静音

RemoteIO 录制的音频文件为静音或 4KB

如何检测音频是不是无法静音?