【问题标题】:Apply effect on microphone对麦克风应用效果
【发布时间】:2019-04-05 20:15:13
【问题描述】:

我正在开发一个浏览器语音通信应用程序,所以问题是 - 我需要对麦克风输入流应用一些效果。我以这种方式获得流进行测试,我的对话者应该听到正弦声音:

navigator.mediaDevices.getUserMedia({audio: true, video: false})
.then(stream => {
    var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
    var sinea = audioCtx.createOscillator();
    sinea.frequency.value = 440;
    sinea.type = "sine";
    sinea.start();
    sinea.connect(stream);
})

没有效果。虽然没有抛出异常。 stream.connect(sinea) - 也没办法。那么如果可能的话,应该在这里使用什么方法向流数据添加一些音频过滤器?谢谢。

【问题讨论】:

  • 这里有两个源,一个麦克风和一个正弦波。您打算如何让它们相互影响?

标签: javascript webrtc web-audio-api


【解决方案1】:

类似的东西(你必须玩一点)

navigator.mediaDevices.getUserMedia({audio: true, video: false})
.then(stream => {
    var audioCtx = new AudioContext(); // will work in any modern browser
    var source = audioCtx.createMediaStreamSource(stream);
    var sinea = audioCtx.createOscillator();
    sinea.frequency.value = 440;
    sinea.type = "sine";
    sinea.start();
    source.connect(sinea);
    sinea.connect(audioCtx.destination);
})

您将设备流附加到AudioContext,方法是将其定义为MediaStreamSource。然后将每个AudioNodes 连接在一起,最后连接到上下文destination 以获得最终输出。

那么MDN WebAudio Documentation可以帮你解决这些问题,并且有很多例子。

【讨论】:

  • 非常感谢!刚刚尝试过,现在我得到了这个:IndexSizeError: Failed to execute 'connect' on 'AudioNode': input index (0)超过了输入数(0),所以要深入研究createChannelMerger()方向;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多