在电子应用中获取扬声器输出电平

Posted

技术标签:

【中文标题】在电子应用中获取扬声器输出电平【英文标题】:Get speaker output level in electron application 【发布时间】:2021-10-30 01:42:05 【问题描述】:

我正在尝试让我的笔记本电脑的扬声器音量显示在我的应用程序中。我是 WebRTC 和 Web Audio API 的新手,所以只是想确认一个功能的可能性。该应用程序是一个电子应用程序并具有呼叫功能,因此当呼叫另一端的用户说话时,该应用程序应显示一个输出电平,该电平会根据声音而变化。我尝试过使用 WebRTC 和 Web Audio API,甚至看到了sample。我可以记录值,但是当我对着麦克风讲话时,情况会发生变化,而我只需要扬声器的值而不是麦克风。

export class OutputLevelsComponent implements OnInit 

  constructor()  

  ngOnInit(): void 
    this.getAudioLevel()
  

  getAudioLevel() 
    try 
      navigator.mediaDevices.enumerateDevices().then(devices => 
        console.log("device:", devices);
        let constraints = 
          audio :  
            deviceId: devices[3].deviceId
          
        
        navigator.mediaDevices.getUserMedia(constraints).then((stream) => 
          console.log("stream test: ", stream);
          this.handleSuccess(stream)
        );
      );
     catch(e) 
      console.log("error getting media devices: ", e);
    
    
  

  handleSuccess(stream: any) 
    console.log("stream: ", stream);
    var context = new AudioContext();
    var analyser = context.createScriptProcessor(1024, 1, 1);
    var source = context.createMediaStreamSource(stream);
    source.connect(analyser);
    // source.connect(context.destination);

    analyser.connect(context.destination);
    opacify();

    function opacify() 
      analyser.onaudioprocess = function(e) 
        // no need to get the output buffer anymore
        var int = e.inputBuffer.getChannelData(0);
        var max = 0;
        for (var i = 0; i < int.length; i++) 
          max = int[i] > max ? int[i] : max;
        
        if (max > 0.01) 
          console.log("max: ", max);
        
      
    
  

我已经尝试了上面的代码,我使用 enumerateDevices()getUserMedia() 这将提供一组设备,出于演示目的,我将使用最后一个具有“音频输出”作为 kind 属性和访问设备流的值的设备。

请让我知道这是否可以通过 Web Audio API 实现。如果没有,是否有任何其他工具可以帮助我实现此功能?

提前致谢。

【问题讨论】:

【参考方案1】:

您需要将handleSuccess() 函数与从远程端获得的流一起使用。该流通常作为track event 的一部分公开。

【讨论】:

以上是关于在电子应用中获取扬声器输出电平的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 中的声音输出电平

如何获取可用输出音频源列表(扬声器、耳机、蓝牙)

是否可以以编程方式在 Android 中收听扬声器输出?

在 Windows 中查找扬声器输出的当前音量级别

用户移动手机时更改输出扬声器

在 Java 中,如何录制发送到扬声器的声音输出? [复制]