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

Electron主进程播放音频技术问询:WebSocket消息触发本地音频播放

在Electron主进程中播放本地音频的解决方案

当然可以在Electron主进程里播放本地音频文件啦——像你这种没法依赖渲染器进程的场景,这是很常见的解决方案。下面给你两种靠谱的实现方式:

方案一:使用第三方库(简单跨平台)

最省心的方式是用play-sound这个npm包,它已经帮你处理了跨平台的兼容性问题,支持Windows、macOS和Linux。

步骤:

  1. 安装依赖:
npm install play-sound --save
  1. 在主进程中调用播放:
const path = require('path');
const player = require('play-sound')(opts = {});

// 假设你的音频文件在项目根目录的assets文件夹下
const soundPath = path.join(__dirname, '../assets/notification.wav');

// 在WebSocket收到消息时调用播放
webSocket.on('message', (data) => {
  player.play(soundPath, (err) => {
    if (err) console.error('播放提示音失败:', err);
  });
});

这个库会自动调用系统对应的音频播放器,不需要你自己处理平台差异。

方案二:直接调用系统原生播放器(无额外依赖)

如果你不想引入第三方包,也可以用Node.js的child_process模块直接调用系统自带的音频播放命令,完全零依赖。

代码示例:

const { exec } = require('child_process');
const path = require('path');
const os = require('os');

const playNotificationSound = () => {
  const soundPath = path.join(__dirname, '../assets/notification.wav');
  let command;

  switch(os.platform()) {
    case 'darwin': // macOS
      command = `afplay "${soundPath}"`;
      break;
    case 'win32': // Windows
      command = `powershell -c (New-Object Media.SoundPlayer '${soundPath}').PlaySync()`;
      break;
    case 'linux': // Linux
      command = `aplay "${soundPath}"`;
      break;
    default:
      console.error('当前平台不支持原生音频播放');
      return;
  }

  exec(command, (err) => {
    if (err) console.error('播放提示音失败:', err);
  });
};

// WebSocket消息触发播放
webSocket.on('message', (data) => {
  playNotificationSound();
});
关键注意事项
  • 路径正确性:一定要用path.join拼接绝对路径,因为主进程的工作目录在开发和打包后可能不一致,直接用相对路径容易找不到文件。
  • 打包资源配置:如果用Electron Builder或Electron Packager打包应用,要确保音频文件被包含在打包产物里。比如在package.json的files字段中添加:
    "files": [
      "assets/**/*",
      "main.js"
    ]
    
  • 错误处理:记得捕获播放过程中的错误,避免因为音频文件损坏或路径错误导致主进程崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:07:51