【发布时间】:2022-02-26 11:38:11
【问题描述】:
Java 和 iOS 也有类似的问题,但我想知道通过 getUserMedia() 在 javascript 中检测音频记录的静音。所以给定:
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
const mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
const audioChunks = [];
mediaRecorder.addEventListener("dataavailable", event => {
audioChunks.push(event.data);
});
mediaRecorder.addEventListener("stop", () => {
const audioBlob = new Blob(audioChunks);
const audioUrl = URL.createObjectURL(audioBlob);
const audio = new Audio(audioUrl);
audio.play();
});
});
我想知道是否可以在stop 事件中的Blob、URL 或Audio 对象上检查是否存在不存在音频。如果选择了坏的麦克风或虚拟设备 - 任何类似的东西。我之前检查了 blob 的大小,但无声音频仍然有文件大小。我可以通过ffmpeg 在后端执行此操作,但希望在纯 JS 中有一种方法可以简化。
【问题讨论】:
-
每次
dataavailable事件执行此操作可能会很昂贵,但也许尝试将 Blob 转换为 AudioBuffer 并读取通道值?如果它们都为零(或接近于零),您可以假设没有检测到音频。在此处将 Blob 转换为 AudioBuffer:stackoverflow.com/a/61531985/5522641 -
我认为您可以使用
Kaiido建议的此代码:stackoverflow.com/a/46781986/11966136
标签: javascript audio