【问题标题】:Play audio with Node.JS使用 Node.JS 播放音频
【发布时间】:2012-09-14 15:01:57
【问题描述】:

我目前正在使用child_process 和命令行mplayer 在本地机器上播放音频,以及我的Node.JS 应用程序。这行得通,但它并不是一个很好的解决方案。我最大的问题是从 mplayer 开始到音频开始播放需要 500 毫秒。

有没有更好的方法来播放音频?最好是压缩音频,但我会尽我所能。

【问题讨论】:

  • @lanzz 是的,虽然我有,但可能需要重新检查
  • 这个应用是什么?您是否需要互联网上真正的低延迟音频?

标签: node.js audio


【解决方案1】:

我想你问的是在 nodejs 生态系统中是否有任何好的模块可以处理音频?

每当您遇到此类问题时,您应该首先访问npmjs,然后输入适当的关键字。

这是我在 npmjs 网站上找到的与 audio 相关的模块列表。

substacks 的 baudio 在我看来不错。

【讨论】:

  • 我不太清楚,我想播放音频文件。对于那个很抱歉。感谢您的链接,komponist / mpd 实际上是我可以使用的东西。但我会为这个项目保持简单,用mplayer -slave试试运气。
  • baudio 绝对是不是你想要的播放音频文件
【解决方案2】:

我建议使用node-speaker,它将原始 PCM 数据输出到您的扬声器(所以基本上,它播放音频)。

如果您正在播放诸如 mp3 文件之类的文件,您可能需要先将其解码为 PCM 数据,这正是 node-lame 所做的。

希望对您有所帮助。

【讨论】:

  • 有没有发现不需要python的东西?
【解决方案3】:

我发现(在 Mac OS 上)最简单的方法是使用

exec('afplay whatever.mp3', audioEndCallback)

【讨论】:

  • OS X 上还有open 命令。
  • 别忘了const { exec } = require('child_process');
【解决方案4】:

查看node-groove - Node.js 绑定到 libgroove:

此库提供播放列表中音频的解码和编码。它旨在用作音乐播放器应用程序的后端,但它足够通用,可用作任何音频处理实用程序的后端。

免责声明:我编写的库是免费的、开源的,不隶属于任何产品、服务或公司。

【讨论】:

  • 感谢您的建议。我真的很喜欢 libgroove。但是,您可能想提及它是您编写的。
  • 为什么相关?答案的质量不受模块作者的影响。
  • 我相信@BonsaiOak 是正确的。 help center 说:“发布好的相关答案,如果某些(但不是全部)恰好与您的产品或网站有关,那没关系。但是,您必须在您的答案中披露您的从属关系。”
  • @TachyonVortex 很公平。已更新。
【解决方案5】:

您也可以使用play-sound 模块:

使用 npm 安装,运行命令:

npm install play-sound --save

现在在您的代码中使用:

var player = require('play-sound')(opts = {})

 player.play('./music/somebody20.flac', function (err) {
   if (err) throw err;
   console.log("Audio finished");
 });

【讨论】:

  • 那个模块只是执行一个命令(例如 mplayer),就像 OP 已经在做的那样
【解决方案6】:

查看sound-play,这是一个简单的解决方案,无需使用外部播放器即可在 Windows 和 MacOS 上运行:

const sound = require('sound-play')
sound.play('music.mp3')

免责声明:我是这个包的作者。

【讨论】:

  • 可以分享一下关于声音播放的文档吗?如何暂停/播放、增大/减小音量或停止播放?
【解决方案7】:

介绍,audic。它不使用任何本机依赖项,​​因此它不会像上面的答案那样中断。

观察:

import Audic from 'audic';

const audic = new Audic('audio.mp3');

await audic.play();

audic.addEventListener('ended', () => {
    audic.destroy();
});

或更简单地说:

import {playAudioFile} from 'audic';

await playAudioFile('audio.mp3');

【讨论】:

  • 这是唯一一个为我工作的跨平台的。缺点:音频播放完毕时没有回调(据我所知)。优点:适用于高质量的 .m4a,让我在播放之前加载所有内容。
  • @JeffHykin 由于 Audic 允许暂停,因此在完成时使用回调在这里不起作用。但是,与 Web 音频 API 一样,您可以在 setTimeout 中使用 audio.duration
  • 了解这一点很有帮助。解决暂停或声音结束(以先到者为准)的承诺将非常方便。不过,在声音结束时解决的承诺(如果暂停则永远不会解决)也很方便。 setTimeout 似乎有点 hacky。
  • 它真的可以在 linux 中工作吗?据我所知,它在 ubunutu 18.04 lts 中不起作用。
【解决方案8】:

您可以使用播放声音模块和路径来实现。

npm install play-sound

import path from 'path'; 
const __dirname = path.resolve();
import sound from 'sound-play';

const filePath = path.join(__dirname, "file.mp3");
sound.play(filePath);

【讨论】:

  • 你能分享一下关于播放声音的文档吗?如何暂停/播放、增大/减小音量或停止播放?
  • @trungkmy 这里是文档的链接npmjs.com/package/play-sound
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 2019-10-29
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多