如何循环播放MP3音频?

6
如何循环播放MP3?
我用这段代码播放MP3,但它仅播放一次。
我想要连续播放MP3。
/*jslint node: true, vars: true, maxerr: 50, indent: 4 */
(function (console, require, alarm) {
    "use strict";

    var fs = require("fs");
    var lame = require("lame");
    var Speaker = require("speaker");

    function start() {
        var stream = fs.createReadStream("sounds/alarm.mp3");
        stream.pipe(new lame.Decoder()).pipe(new Speaker());
    }

    alarm.start = start;
}(global.console, require, exports));

使用: (注:该文本为HTML代码,已保留原文)

记录下你所研究的内容。在 Node 文档中找不到 lame?speaker?等相关信息。 - djechlin
我不确定正确的做法是什么。我尝试过 stream.on("close", function () { start(); });,但是没有起作用。它开始同时播放几个MP3,然后停止了。 - XP1
我尝试将解码器和扬声器实例保存到变量中,然后修改代码行为stream.pipe(decoder, {end: false}).pipe(speaker, {end: false});。这会导致Node消耗所有内存,然后崩溃:"FATAL ERROR: Evacuation Allocation failed - process out of memory"。 - XP1
我已经为你的问题点赞,但我建议将你最后两条评论放在问题中,而不是在评论中。 - djechlin
1个回答

2

在启动新实例之前,等待Speaker实例的“finish”事件。

var speaker = new Speaker();
speaker.on('finish', start);
stream.pipe(new lame.Decoder()).pipe(speaker);

我用你的三行代码替换了 start 中的第二行,但它只播放一次。似乎“finish”事件从未触发。我在Windows 8上使用node-lame 1.0.2、node-speaker 0.0.10和Node 0.10.8。 - XP1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接