2013-05-10 61 views
4

我正在處理流式無線電應用程序。一切工作正常,除了改變均衡器效果不會影響聲音。Android - 均衡器usePreset不工作(音效無變化)

通過調用usePreset(預設)更改均衡器效果不會對聲音效果進行任何更改。

即使沒有錯誤,爲什麼usePreset不會更改聲音效果。

我用4.0.3在samsung galaxy sII中測試過。

public void startPlayer() { 
    // 
    // Check whether we can acquire the audio focus 
    // to start the player 
    // 
    if (!requestAudioFocus()) { 
     return; 
    } 

    if (null != mAudioPlayer) { 
     if (mAudioPlayer.isPlaying()) { 
      mAudioPlayer.stop(); 
     } 
     mAudioPlayer.reset(); 
    } else { 
     mAudioPlayer = new MediaPlayer(); 
     mAudioPlayer.reset(); 
    } 
    try { 
     notifyProgressUpdate(PLAYER_INITIALIZING); 
     try { 
      mEqualizer = new Equalizer(0, mAudioPlayer.getAudioSessionId()); 
      mEqualizer.setEnabled(true); 
      Log.d(TAG, 
        "Audio Session ID " + mAudioPlayer.getAudioSessionId() 
          + "Equalizer " + mEqualizer + " Preset " 
          + mEqualizer.getCurrentPreset()); 
     } catch (Exception ex) { 
      mEqualizer = null; 
     } 
     mAudioPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mAudioPlayer.setDataSource(mCurrentTrack.getStreamURL()); 

     // 
     // Add the Listener to track the player status 
     // 
     mAudioPlayer.setOnCompletionListener(this); 
     mAudioPlayer.setOnBufferingUpdateListener(this); 
     mAudioPlayer.setOnPreparedListener(this); 
     mAudioPlayer.setOnInfoListener(this); 
     mAudioPlayer.setOnErrorListener(this); 
     notifyProgressUpdate(PLAYER_BUFFERING); 
     mAudioPlayer.prepareAsync(); 

    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

      //Get the available presets from the equalizer 
    public String[] getEqualizerPresets() { 
     String[] presets = null; 
     short noOfPresets = -1; 
     if (null != mEqualizer) { 
      noOfPresets = mEqualizer.getNumberOfPresets(); 
      presets = new String[noOfPresets]; 
      for (short index = 0; index < noOfPresets; index++) { 
       presets[index] = mEqualizer.getPresetName(index); 
      } 
     } 
     return presets; 
    } 

      //Set the user preferred presets 
    public void setEqualizerPreset(int position) { 
     if (null != mEqualizer) { 
      Log.d(TAG, "setting equlizer effects " + position); 
      Log.d(TAG, "Equalizer " + mEqualizer + " set Preset " + position); 
      mEqualizer.usePreset((short)position); 
      Log.d(TAG, "Equalizer " + mEqualizer + " current Preset " 
        + mEqualizer.getCurrentPreset()); 
     } 
    } 

感謝您的幫助以發現問題。

編輯 此問題尚未解決。我沒有找到解釋均衡器預設使用的示例代碼。

對使用​​預設歡迎的代碼示例的任何引用。

+3

你解決這個問題? – Wayne 2013-07-02 04:38:58

+0

你能爲我提供一些教程嗎? – 2013-08-19 10:39:46

回答

2
+1

感謝您的源代碼。如果它能解決我的問題,請查看源代碼並進行更新 – jpsasi 2014-03-24 06:38:56

+0

爲什麼標記爲答案的鏈接我想知道? – Ishaan 2017-04-28 12:32:11

+0

我不認爲reffrencing源代碼(即使它最終有用)被認爲是一個答案 – 2017-12-17 15:11:54

1

我有同樣的問題。當我將它加載到仿真器上時,它會產生一個錯誤,我不知道爲什麼,它總是說... audiofx.Equalizer。和audiofx.AudioEffect。或類似的東西。但我發現,如果您的其他媒體播放器如n7player在我的情況下,請嘗試關閉它並重試您的媒體播放器。在我的情況下,它的工作原理,但我認爲它必須是一種方法來獲得一些活躍的均衡器。

+0

當我在仿真器和設備中測試均衡器效果時,我沒有運行任何其他音頻應用程序。讓我再檢查一次。 – jpsasi 2013-07-01 14:16:22