可以在获取的时候将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>
网友回复
webgl与webgpu有啥不同?
Zero Trust的Tunnels怎么设置泛域名解析及http服务获取当前访问域名?
Spec Coding(规范驱动编码)和 Vibe Coding(氛围编程)有啥区别?
如何在国内服务器上正常运行未备案的域名网站?
Cloudflared 和WARP Connector有啥不同?
有没有让本地开源大模型越狱的方法或插件啥的?
如何使用Zero Trust的Tunnels技术将局域网电脑web服务可以公网访问呢?
编程领域ai大模型的排名是怎么样的?
如何修改别人发给我的微信笔记内容?
fbx、obj、glb三维格式模型如何在浏览器中通过three相互转换格式?


