2017-04-11 80 views
2

我学习/ Web Audio API使用打,这是真棒。 我有一些代码,它分析音频流的FFT并实时进行一些计算。它运行在浏览器中。PhantomJS分析MP3文件的FFT数据,并将其保存

但现在我需要做同样的事情,但处理整个的AudioFile和获取数据的阵列,而不是打它,并实时分析和最好的情况下做到这一点在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,如何采用该代码在浏览器中运行?

感谢

+0

PhantomJS没有支持音频和视频。也许看看Electron和/或NW.js? – Vaviloff

+0

所以你是服务器端的权利?首先由ffmpeg将你的mp3解压缩为一个原始的wav。然后分析这个原始的wav比较容易。几个节点包:https://www.npmjs.com/browse/keyword/fft – Kaiido

回答

0

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

相关问题