【问题标题】:Audiocontext Web Audio API createMediaStreamDestination().stream no audioAudiocontext Web Audio API createMediaStreamDestination().stream 没有音频
【发布时间】:2021-08-28 20:46:03
【问题描述】:

我正在尝试从麦克风接收音频并将其通过一些过滤器并从中再次创建一个流并将其发送到扬声器,以便我可以收听处理后的音频。 但是当我将新流传递到目的地时,我听不到任何音频。

const [stream] = await Promise.all([
  navigator.mediaDevices.getUserMedia({
    audio: {
        deviceId: { exact: input.value },
        channelCount: { ideal: 1 },
        noiseSuppression: { ideal: false },
        echoCancellation: { ideal: true },
        autoGainControl: { ideal: false },
        sampleRate: { ideal: 48000 },
    },
  }),
]);
const source = context.createMediaStreamSource(stream);
//filters will be added later
//source.connect(context.destination) this works i can hear the audio
const newStream = context.createMediaStreamDestination().stream;
//I need to convert the filtered audio back to stream
const source2 = context.createMediaStreamSource(newStream);
source2.connect(context.destination); //this doesnt work i cant hear audio

【问题讨论】:

    标签: javascript audiocontext


    【解决方案1】:

    您的示例代码错过了从原始MediaStreamAudioSourceNode(在您的代码中称为source)到MediaStreamAudioDestinationNode(尚未分配给变量)的连接。

    如果您像这样更改代码,它应该可以工作:

    const destination = context.createMediaStreamDestination();
    const newStream = destination.stream;
    
    source.connect(destination);
    

    但我认为如果您只想收听处理后的音频,则不需要第二个流。假设您的效果是GainNode。我知道这不是最壮观的效果,但我希望它足以作为一个例子。您可以将源连接到 GainNode,然后将 GainNode 的输出连接到 AudioContext 的目标。

    const source = context.createMediaStreamSource(stream);
    const effect = context.createGain();
    
    // This modifies the gain so we can hear a difference.
    effect.gain.value = 0.5;
    
    source.connect(effect);
    effect.connect(context.destination);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      相关资源
      最近更新 更多