我正在使用网络音频 API 和 recorder.js 录制音频,但是当我下载音频并检查此音频频谱图时。我发现信号下降了几毫秒。没有得到任何解决方案。有人能告诉我应该对代码进行哪些更改吗?任何帮助将不胜感激。
let gumStream = null;
let recorder = null;
let audioContext = null;
let recordButton = document.getElementById("recordButton");
let stopButton = document.getElementById("stopButton");
let pauseButton = document.getElementById("pauseButton");
const startRecording = () => {
let constraints = {
audio: true,
video: false,
};
timer.style.color = "#78CF4D"
recordButton.disabled = true;
stopButton.disabled = false;
pauseButton.disabled = false;
audioContext = new window.AudioContext({
sampleRate: 16000,
//bufferLen: 4096
});
console.log("sample rate: " + audioContext.sampleRate);
navigator.mediaDevices
.getUserMedia(constraints)
.then(function (stream) {
console.log("initializing Recorder.js ...");
gumStream = stream;
let input = audioContext.createMediaStreamSource(stream);
recorder = new window.Recorder(input, {
numChannels: 1,
sampleBits: 16, // 8 or 16
//bufferLen: 4096,
mimeType: "audio/wav",
});
recorder.record();
if (stoptime == true) {
stoptime = false;
timerCycle();
}
})
.catch(function (err) {
//enable the record button if getUserMedia() fails
timer.style.color = "#7C7F85"
recordButton.disabled = false;
stopButton.disabled = true;
pauseButton.disabled = true;
});
};
我假设您已经在 Chrome(或 Edge 或 Opera)中对此进行了测试。 Chrome 中存在一个长期存在的错误。当您使用
AudioContext
仅录制内容而不播放任何内容时,它有时会插入静音。
https://bugs.chromium.org/p/chromium/issues/detail?id=1016104
不幸的是,这正是 Recorder.js 所做的。
我正在维护一个类似的库,不久前遇到了同样的问题。幸运的是有一个解决方法。 Chrome 的
MediaRecorder
没有同样的错误。它将在没有任何中断的情况下进行记录。它允许录制包装在 webm 容器中的 PCM 音频。我的图书馆用它来录制未压缩的音频。
extendable-media-recorder
,我希望沉默会消失。