PhantomJS分析mp3文件的FFT数据并保存

时间:2017-04-11 07:21:47

标签: javascript phantomjs fft web-audio web-audio-api

我正在学习/使用Web Audio API,它非常棒。 我有一些代码,分析音频流的FFT并实时进行一些计算。它在浏览器中运行。

但现在我需要做同样的事情,但是处理整个音频文件并获取数据,而不是实时播放和分析,最好的情况是在Phantomjs中进行。如果不可能,浏览器也可以..

示例代码:

var audioElement = document.getElementById("player");
var audioContext = new AudioContext();
var source = audioContext.createMediaElementSource(audioElement);

analyserNode = audioContext.createAnalyser();
analyserNode.fftSize = 2048;

source.connect(analyserNode);
source.connect(audioContext.destination);

analyserNode.connect(audioContext.destination);

和循环函数:

var freqByteData = new Uint8Array(analyserNode.frequencyBinCount);
analyserNode.getByteFrequencyData(freqByteData); 
//do processing FFT data

现在我需要加载一个mp3文件,并处理一个循环函数来获取一些结果数据。所以不要等它玩,而是立即处理。

问题是,我从未尝试过phantomjs。我需要像浏览器一样的确切结果,我也在计算中使用analyserNode.smoothingTimeConstant。 要求是每秒获取30次数据。

如果可能,如何重写此代码并运行它     ./phantomapp file.mp3 将数据保存到某些txt文件或stdout?

如果使用phantomjs无法实现,如何在浏览器中运行此代码?

由于

2 个答案:

答案 0 :(得分:2)

Github上有一个项目:https://github.com/sebpiq/node-web-audio-api

哪种声明" Node.js实现了Web音频API"。

警告:"这甚至不是alpha。只有在您具有冒险精神的情况下才能使用此库。"

以下是相关的SO问题:Why Web Audio API isn't supported in nodejs?

答案 1 :(得分:1)

不了解有关phantomjs的任何信息,但如果您可以使用decodeAudioData将整个文件加载到内存中,则可以使用OfflineAudioContext来处理该文件。这将尽可能快地运行。使用OfflineAudioContext.suspend(time)停止处理,以便您可以在正确的时间拨打AnalyserNode.getByteFrequencyData(freqByteData)以获取频率数据。然后在适当的时间安排暂停,并从此暂停中resume()