具有增益控制function的node.js中的Mp3audio

我正在尝试在node.js中播放一些mp3文件。 事情是,我设法一个接一个地播放,甚至像我想要的那样平行播放。 但是我也想要的是能够控制振幅(增益),最终能够创build一个交叉淡入淡出。 任何人都可以帮我理解我需要做什么? (我想在node-webkit中使用它,所以我需要一个基于node.js的解决scheme,没有外部依赖)。

这是我到目前为止:

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-volume来做到这一点。 要交叉淡入淡出,请提供两个pcmaudio缓冲区(解码器的输出)。 将结果传送给您的扬声器对象。

这是修改的主要部分。 在这种情况下,交叉淡入淡出发生在提供的缓冲区的大小,但是你可以改变它。

 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()