You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron开发:如何将audio/wav类型Blob转换为WAV文件?

解决方案:在Electron主进程中将音频Blob保存为WAV文件

你需要结合Node.js的文件系统模块完成写入操作,核心是把浏览器的ArrayBuffer转换为Node.js识别的Buffer类型,再写入指定目录。

完善主进程代码

直接修改你的ipcMain监听逻辑,加入文件保存流程:

const { ipcMain } = require('electron');
const fs = require('fs').promises; // 使用Promise版fs适配async/await
const path = require('path');
const { Buffer } = require('buffer'); // Node内置模块,无需额外安装

ipcMain.on('save-audio', async (event, arrayBuffer) => {
  try {
    // 1. 把浏览器的ArrayBuffer转成Node.js的Buffer
    const audioBuffer = Buffer.from(arrayBuffer);
    
    // 2. 获取main.js所在的目录路径
    const mainScriptDir = path.dirname(require.main.filename);
    
    // 3. 生成唯一文件名(用时间戳避免覆盖旧文件)
    const saveFileName = `audio-recording-${Date.now()}.wav`;
    const fullSavePath = path.join(mainScriptDir, saveFileName);
    
    // 4. 写入文件到目标目录
    await fs.writeFile(fullSavePath, audioBuffer);
    
    console.log(`音频已成功保存:${fullSavePath}`);
    // 可选:向渲染进程发送保存成功的通知
    event.reply('save-audio-success', fullSavePath);
  } catch (error) {
    console.error('音频保存失败:', error);
    // 可选:向渲染进程发送错误信息
    event.reply('save-audio-fail', error.message);
  }
});

关键注意点

  • 格式兼容性:部分浏览器的MediaRecorder默认不输出audio/wav(比如Chrome默认输出audio/webm),如果保存的文件无法播放,可在渲染进程打印mediaRecorder.mimeType确认实际格式,再同步调整Blob的type和文件后缀。
  • 权限问题:确保Electron应用拥有目标目录的写入权限,打包后的应用尤其需要注意。
  • 文件名唯一性:用时间戳或随机字符串命名,避免重复录制时覆盖已有文件。

可选:渲染进程接收保存状态

如果需要在前端反馈保存结果,可在preload脚本中暴露监听方法,再在渲染进程中接收:

preload.js补充代码

const { contextBridge, ipcRenderer } = require('electron');

contextBridge.exposeInMainWorld('audioAPI', {
  sendAudioToMain: (buffer) => ipcRenderer.send('save-audio', buffer),
  onSaveSuccess: (callback) => ipcRenderer.on('save-audio-success', (event, path) => callback(path)),
  onSaveFail: (callback) => ipcRenderer.on('save-audio-fail', (event, msg) => callback(msg))
});

渲染进程监听代码

// 在录制完成后监听结果
window.audioAPI.onSaveSuccess((savePath) => {
  alert(`音频已保存至:${savePath}`);
});

window.audioAPI.onSaveFail((errorMsg) => {
  alert(`保存失败:${errorMsg}`);
});

内容的提问来源于stack exchange,提问作者originofpork

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:25:13