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



我正在学习/玩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 次。

如果可能,如何重写此代码并像 ./幻影文件.mp3 哪个将数据保存到某个 TXT 文件或标准输出?

如果使用phantomjs是不可能的,如何采用此代码在浏览器中运行?

谢谢

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

其中声称"Node.js Web音频API的实现"。

警告:"这甚至不是阿尔法。只有当你是喜欢冒险的人时,才使用这个图书馆。

这里有一个相关的SO问题:为什么nodejs不支持Web音频API?

对 phantomjs 一无所知,但如果您可以使用decodeAudioData将整个文件加载到内存中,则可以使用OfflineAudioContext来处理该文件。 这将尽可能快地运行。 使用OfflineAudioContext.suspend(time)停止处理,以便您可以在正确的时间呼叫AnalyserNode.getByteFrequencyData(freqByteData)以获取频率数据。 然后在适当的时间安排挂起,并从此挂起中resume()

最新更新