【问题标题】:Web Audio API - Stereo to Mono网络音频 API - 立体声到单声道
【发布时间】:2022-12-22 07:09:55
【问题描述】:

我需要将来自 chrome.tabCapture.capture 的立体声输入 (channelCount: 2) 流转换为单声道流并将其发送到服务器,但保持原始音频不变。

我尝试了几种方法,但 destination.stream 总是有 2 个频道。

            const context = new AudioContext()

            const splitter = context.createChannelSplitter(1)
            const merger = context.createChannelMerger(1)
            const source = context.createMediaStreamSource(stream)
            const dest = context.createMediaStreamDestination()

            splitter.connect(merger)
            source.connect(splitter)
            source.connect(context.destination) // audio unchanged
            merger.connect(dest) // mono audio sent to "dest"
            
            console.log(dest.stream.getAudioTracks()[0].getSettings()) // channelCount: 2

我也试过这个:

            const context = new AudioContext()

            const merger = context.createChannelMerger(1)
            const source = context.createMediaStreamSource(stream)
            const dest = context.createMediaStreamDestination()

            source.connect(context.destination)
            source.connect(merger)
            merger.connect(dest)
            
            console.log(dest.stream.getAudioTracks()[0].getSettings()) // channelCount: 2

还有这个:

            const context = new AudioContext()

            const source = context.createMediaStreamSource(stream)
            const dest = context.createMediaStreamDestination({
                channelCount: 1,
                channelCountMode: 'explicit'          
            })

            sourcer.connect(context.destination)
            soruce.connect(dest)
            
            console.log(dest.stream.getAudioTracks()[0].getSettings()) // channelCount: 2

必须有一个简单的方法来实现这一目标...... 谢谢!

【问题讨论】:

    标签: javascript audio google-chrome-extension webrtc


    【解决方案1】:

    Chrome 中存在一个错误,它要求在 channelCount 属性更新之前播放音频。默认为 2。

    以下示例假定 AudioContext 正在运行。调用 resume() 以响应用户操作应该可以工作,以防不允许它自己运行。

    const audioContext = new AudioContext();
    const sourceNode = new MediaStreamAudioSourceNode(
        audioContext,
        { mediaStream }
    );
    const destinationNode = new MediaStreamAudioDestinationNode(
        audioContext,
        { channelCount: 1 }
    );
    
    sourceNode.connect(destinationNode);
    
    setTimeout(() => {
        console.log(destinationNode.stream.getAudioTracks()[0].getSettings());
    }, 100);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多