2017-04-11 17 views
2

私はWeb Audio APIを使って学習しています。素晴らしいです。 私はオーディオストリームのFFTを分析し、リアルタイムでいくつかの計算を行ういくつかのコードを持っています。それはブラウザで動作します。PhantomJSはMP3ファイルのFFTデータを解析して保存します

しかし、私は同じことをする必要がありますが、オーディオファイル全体を処理し、データの配列を取得し、それを再生してリアルタイムで分析し、最良の場合はPhantomjsで行います。それが不可能な場合は、ブラウザでもOKです。..

サンプルコード:

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を使用しています。 要求は1秒あたり30回のデータを取得することです。それが可能であれば

、どのようにこのコードを書き換えると、いくつかのtxtファイルまたは標準出力にデータを保存し ./phantomappのfile.mp3 のようにそれを実行するには?

ファントムでは不可能な場合は、このコードをブラウザで実行する方法を教えてください。

おかげ

+0

PhantomJSは現在オーディオとビデオをサポートしていません。おそらく、ElectronやNW.jsを見ているかもしれませんか? – Vaviloff

+0

あなたはサーバーの右側ですか?まずffmpegのおかげであなたのmp3を生のwavに解凍します。この生のwavを分析する方が簡単です。いくつかのノードパッケージ:https://www.npmjs.com/browse/keyword/fft – Kaiido

答えて

2

のGithub上のプロジェクトがあります:https://github.com/sebpiq/node-web-audio-api

"ウェブオーディオAPIのNode.jsの実装" を主張しています。

警告:「これはアルファベットではありません。このライブラリは、あなたが冒険的な人であれば使用してください。」 Why Web Audio API isn't supported in nodejs?

+0

ありがとう。私はnodejでそれができないことを理解しました。私は質問を更新し、nodejsをphantomjsに変更しました。 – Ural

0

がphantomjsについて何も知らないが、あなたはdecodeAudioDataを使用してファイル全体をメモリにロードすることができれば、あなたはファイルを処理するためにOfflineAudioContextを使用することができます。ここでは

はSO関連の質問です。これはできるだけ早く実行されます。 OfflineAudioContext.suspend(time)を使用して処理を停止すると、AnalyserNode.getByteFrequencyData(freqByteData)に電話して頻度データを取得することができます。その後、適切な時間にサスペンドをスケジュールし、このサスペンドからresume()をスケジュールします。

関連する問題