AudioContext调用createMediaStreamDestination生成流无音频输出问题
问题原因
你代码的核心问题是没有将原始音频源连接到用于生成新流的MediaStreamDestination节点。createMediaStreamDestination()生成的流本身不会主动产生音频数据,只有上游有音频节点输出内容到这个目标节点时,它对应的stream才会携带可播放的音频。你当前逻辑里直接从空的MediaStreamDestination取流创建新源,自然没有声音输出。
正确实现代码
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); // 创建MediaStreamDestination节点,保留节点引用而非只取stream const streamDest = context.createMediaStreamDestination(); // 将原始源连接到该目标节点(后续你要加滤波器的话,就源连滤波器,滤波器连streamDest即可) source.connect(streamDest); // 此时streamDest里的stream才有音频数据 const newStream = streamDest.stream; const source2 = context.createMediaStreamSource(newStream); source2.connect(context.destination); // 此时就可以正常听到声音了
扩展说明
后续你要加滤波器处理逻辑的话,只需要调整连接链路即可:source → 滤波器1 → 滤波器2 → streamDest,后续从streamDest取到的流就已经是处理后的音频流,不管是输出到扬声器还是做其他传输都可以正常使用。
内容的提问来源于stack exchange,提问作者KEMANTH RAJ
相关产品推荐
相关产品推荐

