在使用 Node.js 创建的网站上播放 mp3

Dom*_* A. 5 html audio mp3 node.js sails.js

我已经搜索了几个小时和几天的时间来为我的问题找到一个好的解决方案。

首先是我的场景: 我正在用 Node.js 构建一个网站——尤其是 Sails.js。目标是拥有我的服务器端目录(已经完成)的 mp3 文件列表,这些文件作为客户端(网站)上的链接。

当我点击一个链接时,我希望将文件加载到我的 HTML 音频标签中(或者如果有更好的 node.js 特定解决方案,可以控制启动/停止,也可以)。

这就是我目前遇到的问题......

正如我所说,我已经搜索了几天来寻找解决此问题的最佳或最常见的解决方案……但目前没有有用的教程或建议来解决此问题。

我发现了很多模块,但它们(如果我理解正确的话)仅用于在服务器端播放声音......例如:https : //github.com/TooTallNate/node-speaker

最适合的解决方案可能是模块http://binaryjs.com。但它说它的兼容性有限:

目前支持 Chrome 15+ 和 Firefox 11+,IE10。支持 Safari、移动 iOS 和 Android 以及较旧的 FF/Chrome 版本的后备系统正在开发中

所以我不确定我是否应该使用它。

所以我的问题: 是有没有人已经为这种情况构建了类似的解决方案或想法?哪个模块最多可以完成这项工作?或者有人对 binary.js 有一些经验吗?

我希望有人可以帮助我,这样我就不必再搜索几个小时了:P

谢谢!

Dom*_* A. 5

最后我找到了适合我的场景的解决方案!
现在我在服务器端读取文件并将其转换为 base64 字符串。
后来我在客户端使用这个字符串并将它提供给我的音频标签!=)

这是我的例子。也许它也会帮助别人!:)

这是我的 DirectoryController 的服务器端控制器功能:

readFile: function(req, res){
    var fs = require('fs');
    var returnData = {};

    fs.readFile('D:\\Media\\Music\\TheAudioFile.mp3', function(err, file){
        var base64File = new Buffer(file, 'binary').toString('base64');

        returnData.fileContent = base64File;

        res.json(returnData);
    });
}
Run Code Online (Sandbox Code Playgroud)

客户端现在可以通过 ajax 调用来调用控制器函数。就我而言,我通过 socket.io GET 调用它:

function loadFile(){
    socket.get('/directory/readFile', function(response){
        var audioSrc = 'data:audio/mp3;base64,' + response.fileContent;
        var audio = new Audio();

        audio.src = audioSrc;
        audio.load();
        audio.play();
    });
}
Run Code Online (Sandbox Code Playgroud)


最后,这就是整个魔术!=)

如果有人有更好的解决方案 ==> 让我知道!=)


Tim*_*ple 0

由您的客户端代码将 .mp3 包含在音频标记中。由于您使用的是 Sails,因此您很可能只希望 mp3 文件成为asset,然后您可以从 html 中引用它们。