gpt4 book ai didi

javascript - 使用 MediaRecorder 录制音频 webm 时没有元数据

转载 作者:行者123 更新时间:2023-12-03 12:10:51 24 4
gpt4 key购买 nike

对于我的项目,我使用 MediaRecorder 录制用户音频,它几乎可以正常工作。当我希望使用 Wavesurfer.js 显示用户记录的波形时,我的问题就出现了,它不会加载我的记录。不过,使用音频元素播放录音效果很好。

在尝试了不同的来源之后,它似乎是因为最终的 .webm 文件没有太多元数据,甚至没有持续时间或比特率(即使我在 MediaRecorder 选项中设置了它)。
以下是 ffprobe 的输出以及其中一个文件:

Input #0, matroska,webm, from '206_3.webm':
Metadata:
encoder : Chrome
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)



所以我的问题是:我在录制音频方面做错了吗?这是我开始录制的方式:
// Somewhere in the code...
this._handleUserMedia(await navigator.mediaDevices.getUserMedia({ audio: true }));

// ... and elsewhere
_handleUserMedia(stream) {
this._mediaRecorder = new MediaRecorder(stream, { audioBitsPerSecond : 64000 });

this._mediaRecorder.ondataavailable = event => {
this._mediaBuffer.push(event.data);
};

this._mediaRecorder.onstop = () => {
// Ajoute le buffer et une URL vers le buffer dans les résultats pour la sauvegarde et le playback
let blob = new Blob(this._mediaBuffer, { type: "audio/webm" });
this.state.results[this.state.currentWordIdx].recordingBlob = blob;
this.state.results[this.state.currentWordIdx].recordingUrl = URL.createObjectURL(blob);

// Réinitialise le buffer pour l'enregistrement suivant
this._mediaBuffer = [];

this._gotoNextWord();
};

this._gotoNextWord();
}

如您所见,我创建了一个 blob,稍后我会使用 NodeJS 的 fs.writeFile 保存它。 .然后当我需要显示波形时,我使用 fs.readFile 加载文件像这样:
fs.readFile(`${this.getAppData()}/${filePath}`, (err, buffer) => {
if (err) { reject(err); }
const blob = new Blob([buffer], {type : 'audio/webm'});
resolve(URL.createObjectURL(blob)); // Si besoin d'un ArrayBuffer => toArrayBuffer(buffer)
});

最佳答案

我相信元数据很少的原因是默认情况下,MediaRecorder 会生成 variable bit rate文件,其中单个比特率值没有意义 - 大概(虽然我不确定)导致缺乏明确的持续时间值。
规范最近允许设置 a constant bitrate for recording , 带有 implementation soon to land in Chromium (M89)

关于javascript - 使用 MediaRecorder 录制音频 webm 时没有元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52186254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com