音楽

2016-04-10 14 views
0

た内容に応じて、ビューを移動私はイメージビュー音楽

はこの1つ

enter image description here

乗り越えて

enter image description here

こと

を持って、私はそれがた内容に応じてスケールしますメディアプレーヤーの音楽(ベースにポーズをとっている場合) その試みはスピーカーのように見えます。 私は

public class Visulizer extends Activity { 

TextView mStatusView; 
MediaRecorder mRecorder; 
Thread runner; 
private static double mEMA = 0.0; 
static final private double EMA_FILTER = 0.6; 

final Runnable updater = new Runnable(){ 

    public void run(){ 
     updateTv(); 
    }; 
}; 
final Handler mHandler = new Handler(); 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.noiselevel); 
    mStatusView = (TextView) findViewById(R.id.status); 


    if (runner == null) 
    { 
     runner = new Thread(){ 
      public void run() 
      { 
       while (runner != null) 
       { 
        try 
        { 
         Thread.sleep(1000); 
         Log.i("Noise", "Tock"); 
        } catch (InterruptedException e) { }; 
        mHandler.post(updater); 
       } 
      } 
     }; 
     runner.start(); 
     Log.d("Noise", "start runner()"); 
    } 
} 

public void onResume() 
{ 
    super.onResume(); 
    startRecorder(); 
} 

public void onPause() 
{ 
    super.onPause(); 
    stopRecorder(); 
} 

public void startRecorder(){ 
    if (mRecorder == null) 
    { 
     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     mRecorder.setOutputFile("/dev/null"); 
     try 
     { 
      mRecorder.prepare(); 
     }catch (java.io.IOException ioe) { 
      android.util.Log.e("[Monkey]", "IOException: " + 
        android.util.Log.getStackTraceString(ioe)); 

     }catch (java.lang.SecurityException e) { 
      android.util.Log.e("[Monkey]", "SecurityException: " + 
        android.util.Log.getStackTraceString(e)); 
     } 
     try 
     { 
      mRecorder.start(); 
     }catch (java.lang.SecurityException e) { 
      android.util.Log.e("[Monkey]", "SecurityException: " + 
        android.util.Log.getStackTraceString(e)); 
     } 

     //mEMA = 0.0; 
    } 

} 
public void stopRecorder() { 
    if (mRecorder != null) { 
     mRecorder.stop(); 
     mRecorder.release(); 
     mRecorder = null; 
    } 
} 

public void updateTv(){ 
    mStatusView.setText(Double.toString((getAmplitudeEMA())) + " dB"); 
} 
public double soundDb(double ampl){ 
    return 20 * Math.log10(getAmplitudeEMA()/ampl); 
} 
public double getAmplitude() { 
    if (mRecorder != null) 
     return (mRecorder.getMaxAmplitude()); 
    else 
     return 0; 

} 
public double getAmplitudeEMA() { 
    double amp = getAmplitude(); 
    mEMA = EMA_FILTER * amp + (1.0 - EMA_FILTER) * mEMA; 
    return mEMA; 
} 

}

ultilであってもよいし、これを見つけたが、私はここに非常に困惑しています。私はこれを単純なままにしています...私はFFTについてよく聞き、とても複雑に聞こえます。

+0

おかしい、私はFFTを使用していました。とにかく、ベースをビジュアル化したいのですか?だから、低音が何であるか考えなければならない。あなたの場合は、その振幅と低周波を言って、単純化することができます。私はFFT.java Utilクラスを見つけました。それはあなたがサウンド情報から周波数を得ることができます。サウンドデータと並行して動作する非同期スレッドが必要になり、それを視覚化します。しかし、音は大きな話題です。あなたはそれについていくつかの記事などを読む必要があります。 Googleは「Java Sound Visualizing」のために、デフォルトJavaでこれを行うためのチュートリアルを見つけるでしょう。がんばろう? – Luftbaum

答えて

0

本当のオーディオ処理は難しいです。しかし、あなたのケースで利用できるいくつかの方法を提供するサードパーティのライブラリを使用することができます。

あなたの場合、音圧レベルを検出し、それに応じて図面を更新する必要があります。

音圧レベルを検出するライブラリは次のとおりです。

  1. android-visualizer

  2. Tarsos DSP

  3. android-spl-meter