2017-04-11 76 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()

相關問題