PizzicatoJS播放到指定设备(SinkId)

问题描述 投票:0回答:1

我一直在使用这个名为Pizzicato的库,我想知道如何将其播放到特定的音频输出设备。之前我已经使用像这样的网络音频API做到了。

navigator.getUserMedia({audio: true}, function(stream) {
    var ac = new AudioContext();
    var audio = new Audio();
    var microphone = ac.createMediaStreamSource(stream);
    var dest = ac.createMediaStreamDestination();
    microphone.connect(dest);

    audio.srcObject = dest.stream;

    audio.setSinkId(settings.output);
    audio.play();
}, function (){console.warn("Error getting audio stream from getUserMedia")});

但是在下面的示例中,它没有任何作用。我尝试删除setSinkId,但仍然无法使用。

var voice = new Pizzicato.Sound({ source: 'input' }, (err) => {
    var dest = voice.getRawSourceNode().context.createMediaStreamDestination();
    var audio = new Audio();
    voice.connect(dest);
    audio.srcObject = dest.stream;
    audio.setSinkId(id);
    audio.play();
});
javascript web-audio-api
1个回答
1
投票

Pizzicato.js具有将所有内容连接到的internal GainNode。幸运的是,有一个getter允许我们从外部修改GainNode。

为了获得理想的结果,我们必须将该GainNode从其默认连接的AudioContext的目的地断开。之后,我们可以将其连接到新创建的MediaStreamAudioDestinationNode。

const voice = new Pizzicato.Sound({ source: 'input' });

// Disconnect the masterGainNode from the default destination.
Pizzicato.masterGainNode.disconnect(Pizzicato.context.destination);

const dest = Pizzicato.context.createMediaStreamDestination();

// Connect the masterGainNode to the new destination.
Pizzicato.masterGainNode.connect(dest);

const audio = new Audio();

audio.srcObject = dest.stream;
audio.setSinkId(id);
audio.play();
© www.soinside.com 2019 - 2024. All rights reserved.