可以在获取的时候将echoCancellation设为true
navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true } })完整代码:
.then(stream => audio.srcObject = stream)
.catch(e => log(e));
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
body {
background: #000;
}
</style>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/siriwave.umd.js"></script>
<body>
不要在iframe中打开
<div id="container" style="width: 900px; height: 300px; background: #000"></div>
<script>
var SW = new SiriWave({
style: 'ios9',
speed: 0.1,
amplitude: 0.2,
speedInterpolationSpeed: 0,
frequency: 2,
height: 424,
width: 964,
container: document.getElementById('container'),
autostart: true
});
function getAverageVolume(data) {
var values = 0;
var length = data.length;
for (var i = 0; i < data.length; i++) {
values += data[i];
}
return values / data.length;
}
window.navigator.getUserMedia(
{
audio: {echoCancellation: true}
},
function(stream) {
var audioContext = new (window.AudioContext || window.webkitAudioContext)();
var analyser = audioContext.createAnalyser();
analyser.connect(audioContext.destination); //这一行表示将麦克风声音直接输出,注意没有做回声清除
analyser.smoothingTimeConstant = 0.8;
analyser.fftSize = 2048;
var bufferLength = analyser.frequencyBinCount;
var microphone = audioContext.createMediaStreamSource(stream);
microphone.connect(analyser);
var processor = audioContext.createScriptProcessor(2048, 1, 1);
processor.connect(audioContext.destination);
processor.onaudioprocess = function() {
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
var average = getAverageVolume(array);
SW.setAmplitude(average / 140);
};
},
function() {
console.log(1)
}
);
</script>
</body>
</html>
网友回复
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?