在React中如何将录音Blob切分成5秒WAV文件?
本文讲解如何在React中将录音Blob流切分成多个5秒的WAV文件。直接操作Blob添加WAV头信息容易出错,因此推荐使用`ffmpeg.wasm`库。文章详细介绍了使用`npm install @ffmpeg/ffmpeg`安装`ffmpeg.wasm`,并提供了完整的代码示例,演示如何利用`ffmpeg.wasm`将完整的录音Blob分割成多个5秒的WAV文件,并生成可下载的链接。该方法有效避免了手动处理WAV头信息可能造成的错误,确保了音频文件的完整性和可靠性。 学习此方法,轻松实现React录音文件的分段处理。
React录音Blob流切分与WAV文件转换详解
本文介绍如何在React中将录音的Blob流切分成多个5秒的WAV文件。假设您已使用react-mic完成录音,并希望将录音按5秒为单位分割保存为WAV文件。

直接操作音频Blob并添加WAV头信息容易导致文件损坏,尤其是在分割多个片段时。因此,推荐使用ffmpeg.wasm,一个在浏览器中运行ffmpeg命令的库,高效处理音频和视频。
解决方案:使用ffmpeg.wasm
-
安装
ffmpeg.wasm: 使用npm安装:npm install @ffmpeg/ffmpeg -
录音数据处理: 将
react-mic的录音数据保存为一个完整的Blob。 -
使用
ffmpeg.wasm切分音频: 以下代码演示如何使用ffmpeg.wasm切分音频Blob并生成多个5秒的WAV文件:
import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg';
const ffmpeg = createFFmpeg({ log: true });
async function cutAudio(blob, duration = 5) {
await ffmpeg.load();
const inputFileName = 'input.wav';
const outputFileName = 'output_%03d.wav';
ffmpeg.FS('writeFile', inputFileName, await fetchFile(blob));
await ffmpeg.run('-i', inputFileName, '-f', 'segment', '-segment_time', duration, '-c', 'copy', outputFileName);
const files = ffmpeg.FS('readdir', '.').filter(file => file.startsWith('output_'));
const outputBlobs = [];
for (const file of files) {
const data = ffmpeg.FS('readFile', file);
outputBlobs.push(new Blob([data.buffer], { type: 'audio/wav' }));
}
return outputBlobs;
}
// 使用示例 (假设 audioBlob 已经包含完整的录音数据)
const audioBlob = new Blob(audioChunksRef.current, { type: 'audio/wav' }); // 替换为你的Blob获取方式
const cutBlobs = await cutAudio(audioBlob);
cutBlobs.forEach((blob, index) => {
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `recording_${index}.wav`;
a.click();
URL.revokeObjectURL(url);
});
这段代码首先将Blob写入ffmpeg.wasm的文件系统,然后使用ffmpeg命令进行切分,最后将切分后的WAV文件转换为Blob,并提供下载链接。 audioChunksRef.current 需要替换成你实际获取录音Blob的方式。
通过ffmpeg.wasm, 您可以可靠地将录音Blob流切分成多个5秒的WAV文件,避免了手动处理WAV头信息可能带来的错误。 记得处理异步操作和错误处理,以确保代码的健壮性。
好了,本文到此结束,带大家了解了《在React中如何将录音Blob切分成5秒WAV文件?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!
PHP连接MSSQL数据库SSL错误解决方案
- 上一篇
- PHP连接MSSQL数据库SSL错误解决方案
- 下一篇
- Vue.jsvsSvelte:性能与开发体验深度对比
-
- 文章 · 前端 | 1天前 | js语法教程
- JSSet集合使用与去重技巧详解
- 350浏览 收藏
-
- 文章 · 前端 | 1天前 |
- HTML5离线缓存清除方法大全
- 462浏览 收藏
-
- 文章 · 前端 | 1天前 |
- HTML编码如何避免乱码问题
- 235浏览 收藏
-
- 文章 · 前端 | 1天前 |
- HTMLaddress标签使用方法详解
- 309浏览 收藏
-
- 文章 · 前端 | 1天前 |
- 发布订阅模式消息队列原理与实现解析
- 135浏览 收藏

