2017-08-15 5 views
0

現在、FilerReader、AudioContext経由で特定のファイルの音波を構築するために、Chrome(60.0.3112.90)のWeb Audio APIを使用しています。 、createScriptProcessor、およびcreateAnalyserです。私はanalyser.getFloatFrequencyData(data)にすべての方法を取得し、ファイルをロードする際にWeb Audio API getFloatFrequencyData関数Float32Array引数のデータを-Infinity値の配列に設定する

const visualize = analyser => { 
    analyser.fftSize = 256; 
    let bufferLength = analyser.frequencyBinCount; 
    let dataArray = new Float32Array(bufferLength); 
    analyser.getFloatFrequencyData(dataArray); 
}  

loadAudio(file){ 
    // creating FileReader to convert audio file to an ArrayBuffer 
    const fileReader = new FileReader(); 

    navigator.getUserMedia = (navigator.getUserMedia || 
         navigator.webkitGetUserMedia || 
         navigator.mozGetUserMedia || 
         navigator.msGetUserMedia); 

    fileReader.addEventListener('loadend',() => { 
    const fileArrayBuffer = fileReader.result; 

    let audioCtx = new (window.AudioContext || window.webkitAudioContext)(); 
    let processor = audioCtx.createScriptProcessor(4096, 1, 1); 
    let analyser = audioCtx.createAnalyser(); 

    analyser.connect(processor); 
    let data = new Float32Array(analyser.frequencyBinCount); 

    let soundBuffer; 
    let soundSource = audioCtx.createBufferSource(); 

    // loading audio track into buffer 
    audioCtx.decodeAudioData( 
     fileArrayBuffer, 
     buffer => { 
     soundBuffer = buffer; 
     soundSource.buffer = soundBuffer; 

     soundSource.connect(analyser); 
     soundSource.connect(audioCtx.destination); 

     processor.onaudioprocess =() => { 
      // data becomes array of -Infinity values after call below 
      analyser.getFloatFrequencyData(data); 
     }; 

     visuaulize(analyser); 
     }, 
     error => 'error with decoding audio data: ' + error.err 
    ); 
    }); 

    fileReader.readAsArrayBuffer(file); 
} 

:私は、次のコードを持っています。ウェブオーディオAPIのドキュメントを読めば、それはパラメータであることを言う:

私の場合は
The Float32Array that the frequency domain data will be copied to. 
For any sample which is silent, the value is -Infinity. 

、私はこれをテストしてanalyser.getFloatFrequency(data)を呼び出した後に使用していmp3とwavファイルの両方を持って、両方のファイルが終わります私にdataを与え、 `-Infinity '値の配列になります。

これは私のWeb AudioのAPIについて私が気付いていないことが原因である可能性がありますが、私の疑問は、大きな音を含む両方のファイルが私にサイレントサンプルを表す配列を与えている理由です。

+0

Chromeを使用していますか? –

+0

あなたは何をしようとしているのかを完全にはっきりさせることはできませんが、iHateMyselfForThis.recordAudio(audioCtx、analyzer)の中になければ、audiobuffersourceでstart()を実際に呼び出すことはありませんか? – cwilso

+0

@RaymondToyはい、その情報で質問を更新しました – antihero989

答えて

0

Web Audio AnalyserNodeは、リアルタイムでのみ動作するように設計されています。 (以前はRealtimeAnalyserと呼ばれていました)Web Audioにはバッファの解析機能はありません。 DSP.jsのような別の図書館を見てください。

+0

WebオーディオAPIを使用して、ソングファイル自体が与えられた曲全体のサウンドウェーブ表現を構築する方法はありませんか?私は、https://wavesurfer-js.org/のような複数のプロジェクトを見てきました。これは、サウンドファイルのサウンドウェーブのレンダリングを視覚的に可能にするある種の技術を習得したようです。 – antihero989

+0

いいえ、Web Audioを使用して、ファイル全体の表現をOfflineAudioContext経由で構築できますが、アナライザーを使用することはできません。 – cwilso

関連する問題