我一直在使用这个名为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();
});
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();