2016-10-18 23 views
1

アンドロイド用にTarsosDSPを使い始めたばかりなので、FFTの使い方を理解できません。誰でも私にサンプルを提供できますか?私はちょうどファイルを読んで、それのFFT出力を得たいです。アンドロイドのTarsosDSPライブラリでFFTを使用する

+1

[TarsosDSPのサンプルフォルダ](https://github.com/JorenSix/TarsosDSP/tree/master/src/examples/be/tarsos/dsp/example)を見ると、[サンプルスペクトログラムアプリケーション](https: //github.com/JorenSix/TarsosDSP/blob/master/src/examples/be/tarsos/dsp/example/Spectrogram.java)、これはFFTのかなり典型的な使用方法です。 – SleuthEye

答えて

1

このコードを試してみてください。

new AndroidFFMPEGLocator(this); 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      File externalStorage = Environment.getExternalStorageDirectory(); 
      File sourceFile = new File(externalStorage.getAbsolutePath() , "/440.mp3"); 

      final int bufferSize = 4096; 
      final int fftSize = bufferSize/2; 
      final int sampleRate = 44100; 

      AudioDispatcher audioDispatcher; 
      audioDispatcher = AudioDispatcherFactory.fromPipe(sourceFile.getAbsolutePath(), sampleRate, bufferSize, 0); 
      audioDispatcher.addAudioProcessor(new AudioProcessor() { 

       FFT fft = new FFT(bufferSize); 
       final float[] amplitudes = new float[fftSize]; 

       @Override 
       public boolean process(AudioEvent audioEvent) { 
        float[] audioBuffer = audioEvent.getFloatBuffer(); 
        fft.forwardTransform(audioBuffer); 
        fft.modulus(audioBuffer, amplitudes); 

        for (int i = 0; i < amplitudes.length; i++) { 
         Log.d(TAG, String.format("Amplitude at %3d Hz: %8.3f", (int) fft.binToHz(i, sampleRate) , amplitudes[i])); 
        } 

        return true; 
       } 

       @Override 
       public void processingFinished() { 

       } 
      }); 
      audioDispatcher.run(); 
     } 
    }).start(); 

それはTarsosDSP Manual(12ページ)と、外部記憶装置上の各bufferSize 440.mp3のファイル(テスト440Hzのトーン)(SDカード)のログFFTで計算してショーに基づいて。あなたのプロジェクトのhereからlibsフォルダにTarsosDSP-Android-2.3.jar(またはそれ以降)を追加し、あなたのデバイスのffmpegライブラリ(armeabi-v7a_ffmpeg、armeabi-v7a-neon_ffmpegまたはx86_ffmpeg)に対応するライブラリとして追加してください。あなたのプロジェクトのhereからassetsまで。

そしてAndroidManifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

を追加(また、21より高いtargetSdkVersionのランタイム許可を与える)を忘れないでください

PS。 bufferSizeがソースファイル(またはそれ以上)のサンプル数に等しくなる場合、ファイル全体に対してFFTを与えることができます。

関連する問題