2017-05-09 6 views
1

私は自分のアプリケーションにあらかじめ録音されたオーディオファイルのオーディオバッファを持っています。ウェブオーディオ全体のバッファーを分析する

getAudioDataFromBuffer: function(buf){ 
    var src = g.audioContext.createBufferSource(); 
    src.buffer = buf; 
    var anal = src.context.createAnalyser(); 
    src.connect(anal); 
    var dataArray = new Uint8Array(buf.length); 
    anal.fftSize = 2048; 
    anal.getByteFrequencyData(dataArray); 
    return dataArray; 
}, 

しかし、これは私だけのゼロの完全な配列を与える: 私は全体のオーディオトラックの周波数領域データを取得しようとしている、これは私が試したものです。

2つのオーディオトラックを比較するには、1つはプリレコーディングされ、もう1つはアプリケーションに記録されている必要があります。私は彼らの周波数領域間の相関関係を測定できると思っています。

+2

ジャストノート:「分析」短くしないでください:D – NoOorZ24

+0

にはどうすればチャネルデータから周波数領域データを得るのですか?私はチャネルデータ間の相関を直接測定しようとしましたが、結果は気に入らなかった。 @Kaiido –

+0

@ NoOorZ24これが当てはまれば、変数名として 'dic'やC++の' std'ライブラリ全体を決して見ないでしょう。 – Matthias

答えて

0

私はあなたがAudioBuffer.getChannelData(

のようなもっと何かが必要だと思う)

(0は最初のチャネルを表す付き)チャネルパラメータによって定義されたチャネル、関連付けられたPCMデータを含むFloat32Arrayを返します。

MozillaまたはW3Cのドキュメントを参照してください。

乾杯

キリアン

0

私はthis answerthis discussionを見解に到着しました。

基本的に、OfflineAudioContextを使用する必要があります。すでにロードされ、オーディオバッファから見つめここでコード:

var offline = new OfflineAudioContext(2, buffer.length ,44100); 
var bufferSource = offline.createBufferSource(); 
bufferSource.buffer = buffer; 

var analyser = offline.createAnalyser(); 
var scp = offline.createScriptProcessor(256, 0, 1); 

bufferSource.connect(analyser); 
scp.connect(offline.destination); // this is necessary for the script processor to start 

var freqData = new Uint8Array(analyser.frequencyBinCount); 
scp.onaudioprocess = function(){ 
    analyser.getByteFrequencyData(freqData); 
    console.log(freqData); 
}; 

bufferSource.start(0); 
offline.oncomplete = function(e){ 
    console.log('analysed'); 
}; 
offline.startRendering(); 
関連する問題