我可以在访问另一个应用程序之前在本地捕获和编辑音频流吗?

问题描述

下午好!在这个实现中,我在 webRTC 中使用了电子和 javascript。

为了详细说明这个问题,我了解在从 StreamHandler 获取流并调用 mediaDevices.getUserMedia 之前我在做什么。一旦我有了那个流,我就成功地添加了 AudioContext 来创建过滤器、调整增益等。我听说这些更改也在 audioDestination 设备上发生。所以到目前为止一切都很好。所以我现在的问题是如何将编辑过的音频流放回到它可能去的地方?一个具体的例子是,假设我捕获了我的主麦克风的流,我想在之前调整增益,比如说,音频使它不和谐、抽搐等。

如果我正在想象我认为的过程

麦克风输入 ---> 抓取流 ---> 编辑流 ---> 继续输出到 3rd 方应用。

但似乎发生的是该流创建了一个单独的频道,并且只能在我自己的输出设备上播放,因为我没有目的地可以从指向我的音频已经前往的设备中进行选择。请理解我仍在弄清楚所有这些是如何工作的。我也很乐意更改或编辑问题以更好地满足标准,请告诉我。

更新:我正在添加代码的构造函数和 updateStream 函数。构造函数是我从本地机器获取媒体流的地方,并在单击按钮以激活音频更改并将它们播放到输出调用更新流。我遇到的问题是,当我通过耳机或扬声器播放更新时会发出声音,但我不知道如何让流返回并通过上面提到的应用程序播放。

  constructor(navigator,deskCap,constraints) {
    this._navigator = navigator;
    this._constraints = constraints;
    this._desktopCapturer = deskCap;
    this._mainStream = new MediaStream();

    // Call our object setup functions
    this.getAudioSources();
    navigator.mediaDevices.getUserMedia(constraints).then((media) => {
      
      this._mainStream = media;
      });

    }); 
  }

  updateStream = () => {
    let stream = this._mainStream;
    
    const audContext = new AudioContext(); // Electron AudioContext

    const source = audContext.createmediastreamsource(stream);
    const audDest = audContext.createMediaStreamDestination();
    const audSource = audContext.createmediastreamsource(stream);
    
    const gainNode = audContext.createGain();
    let x = parseFloat(this._outputVolume);

    if(!isNaN(x)) {
      gainNode.gain.value = x;
    } else {
      gainNode.gain.volume = 0.33;
    }
    gainNode.connect(audDest);

    this._mainStream = audDest.stream;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)