node.js中带有增益控制的Mp3音频

node.js中带有增益控制的Mp3音频,node.js,audio,stream,node-speaker,node-lame,Node.js,Audio,Stream,Node Speaker,Node Lame,我正在尝试在node.js中播放一些mp3文件。问题是,我设法一个接一个地播放它们,甚至,我想并行播放。但我也希望能够控制振幅(增益),最终能够产生交叉衰减。有人能帮我理解我需要做什么吗?(我想在node webkit中使用它,所以我需要一个基于node.js的解决方案,没有外部依赖关系。) 到目前为止,我得到的是: var lame = require('lame'), Speaker = require('speaker'), fs = require('fs'); var audioOpt

我正在尝试在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)
})

我定制了npm包来实现这一点。要进行交叉淡入淡出,请提供两个pcm音频缓冲区(解码器的输出)。通过管道将结果传输到扬声器对象

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

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()
var l=buf.length;
var out=新缓冲区(l);
对于(变量i=0;i//您可能需要确保-32767您想在DSP中控制增益还是只想使用您的操作系统音量控制?在DSP中,因为我想交叉衰减两个磁道扫描,如果您找到了一个,请分享这个问题的解决方案?我目前面临着同样的问题:-(正如@micha所说。回答您自己的问题肯定是堆栈溢出的一个特征。:)