2012-09-03 136 views
2

我想開發應用程序,它將有可視化的音頻輸入。android音頻可視化

我正在使用android.media.audiofx.Visualizer這個類。

但無法初始化Visualizer對象。

參考:https://github.com/felixpalmer/android-visualizer/blob/master/src/com/pheelicks/visualizer/VisualizerView.java

這裏是我的代碼:

private MediaPlayer mPlayer; 
private byte[] mBytes; 
private byte[] mFFTBytes; 
private Visualizer mVisualizer; 

mPlayer = MediaPlayer.create(this, R.raw.test); 
     mPlayer.setLooping(false); 
     mPlayer.start(); 

mVisualizer = new Visualizer(mPlayer.getAudioSessionId()); 
     mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); 

    Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener() 
    { 
     @Override 
     public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, 
       int samplingRate) 
     { 
      System.out.println("onWaveFormDataCapture"); 
     } 

     @Override 
     public void onFftDataCapture(Visualizer visualizer, byte[] bytes, 
       int samplingRate) 
     { 
      System.out.println("onFftDataCapture"); 
     } 
    }; 

    mVisualizer.setDataCaptureListener(captureListener, 
      Visualizer.getMaxCaptureRate()/2, true, false); 

    mVisualizer.setEnabled(true); 
    mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
    { 
     @Override 
     public void onCompletion(MediaPlayer mediaPlayer) 
     { 
      mVisualizer.setEnabled(false); 
     } 
    }); 

請在這方面幫助我。

在此先感謝。

+0

當你運行你的代碼時,你會得到什麼錯誤? – Hbcdev

+0

java.lang.RuntimeException:無法啓動活動ComponentInfo {com.android.trial.sounddataextraction/com.android.trial.sounddataextraction.SoundDataExtractionActivity}:java.lang.RuntimeException:無法初始化Visualizer引擎,錯誤:-4 – Rahul

+0

哪條線在你的代碼中它到達了嗎?有幾種可能性,並且知道源中哪一行是問題將有助於縮小範圍。 – Hbcdev

回答

0

錯誤-4意味着你已經通過了一個壞的值作爲參數(http://developer.android.com/reference/android/media/audiofx/Visualizer.html#ERROR_BAD_VALUE)

  1. 你能否檢查Visualizer.getCaptureSizeRange()[1]是否實際上是2的冪次?它應該是,但如果不是,你會將捕獲大小範圍設置爲一個不是2的冪的數字,這會導致此錯誤。

  2. 你可以檢查什麼mPlayer.getAudioSessionId()正在返回?如果這是一個不好的值,例如如果mPlayer的初始化尚未完全結束,則可能導致錯誤。

+0

已經檢查過。 1)Visualizer.getCaptureSizeRange()[1]返回1024 2)mPlayer.getAudioSessionId()返回整數,所以我認爲它的初始化。 – Rahul

+0

但是什麼整數?從你所說的話看來,它可能會返回一個不符合有效會話的整數。例如,如果它是0,那意味着在構建!MediaPlayer時出現錯誤。如果您忘記添加「RECORD_AUDIO」權限,可能會發生這種情況。 – Hbcdev

+0

已添加RECORD_AUDIO權限。我得到非零整數。試圖打印音頻會話ID的值。顯示非零整數。 – Rahul