没有getUserMedia声音分析(Sound analysis without getUserM

2019-09-25 18:05发布

我试图分析从浏览器的音频输出,但我不希望getUserMedia提示,显示(其中询问麦克风权限)。 声音来源是SpeechSynthesis和MP3文件。 这里是我的代码:

return navigator.mediaDevices.getUserMedia({
        audio: true
      })
      .then(stream => new Promise(resolve => {
        const track = stream.getAudioTracks()[0];
        this.mediaStream_.addTrack(track);
        this._source = this.audioContext.createMediaStreamSource(this.mediaStream_);
        this._source.connect(this.analyser);
        this.draw(this);

      }));

此代码工作正常,但它要求使用麦克风的权限! 我一个在所有的麦克风不感兴趣,我只需要衡量的音频输出。 如果我检查所有可用的设备:

navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
  devices.forEach(function(device) {
    console.log(device.kind + ": " + device.label +
            " id = " + device.deviceId);
  });
})

我得到在浏览器中可用的设备,包括“audiooutput”的列表。 那么,有没有办法将其敷设在媒体流的音频输出,可里面“createMediaStreamSource”功能,然后用? 我已经检查了所有的文档,音频API,但无法找到它。 感谢任何人,可以帮助!

Answer 1:

有多种方法可以得到它从胶发起MediaStream,但你将无法捕获所有可能的音频输出...

但是,对于您的MP3文件时,如果通过的MediaElement阅读( <audio><video> ),如果这个文件不破坏CORS服务,那么你可以使用MediaElement.captureStream 。 如果从WebAudioAPI读它,或者如果你的目标不支持浏览器captureStream ,那么你可以使用AudioContext.createMediaStreamDestination 。

对于SpeechSynthesis,不幸的是你需要口香糖......和虚拟音频设备:首先,你将不得不默认的输出设置为VAB_out,那么你的路向VAB_out和VAB_in终于从胶抢VAB_in ...

不是一个简单的,也不可行普遍的任务,而且当IIRC SpeechSynthesis没有任何setSinkId方法。



文章来源: Sound analysis without getUserMedia