5

我正在尝试在 node.js 中播放一些 mp3 文件。问题是我设法一个接一个地播放它们,甚至按照我的意愿并行播放。但我还想要的是能够控制幅度(增益),以便最终能够创建交叉淡入淡出。谁能帮我理解我需要做什么?(我想在 node-webkit 中使用它,所以我需要一个基于 node.js 且没有外部依赖的解决方案。)

这是我到目前为止所得到的:

var lame = require('lame'), Speaker = require('speaker'), fs = require('fs');
var audioOptions = {channels: 2, bitDepth: 16, sampleRate: 44100};
var decoder = lame.Decoder();


var stream = fs.createReadStream("music/ge.mp3", audioOptions).pipe(decoder).on("format", function (format) {
  this.pipe(new Speaker(format))
}).on("data", function (data) {
  console.log(data)
})
4

1 回答 1

0

我定制了 npm 包pcm-volume来做到这一点。要交叉淡入淡出,请提供两个 pcm 音频缓冲区(解码器的输出)。将结果通过管道传送到您的 Speaker 对象。

这是修改的主要部分。在这种情况下,交叉淡入淡出发生在提供的缓冲区的规模上,但您可以更改它。

var l = buf.length;
var out = new Buffer(l);

for (var i=0; i < l; i+=2) {
    volumeSunrise = 0.5*this.volume*(1-Math.cos(pi*i/l));
    volumeSunset  = 0.5*this.volume*(1+Math.cos(pi*i/l));
    uint = Math.round(volumeSunrise*buf.readInt16LE(i) + volumeSunset*this.sunsetBuffer.readInt16LE(i));
    // you may want to ensure that -32767 <= uint <= 32768 here, in case you use a volume higher than 1
    out.writeInt16LE(uint, i);
}

this.push(out);
callback()
于 2016-02-03T11:25:40.610 回答