2012-09-26 32 views
0

它應該是簡單,因爲這:的MediaPlayer不玩 - 錯誤(-22,0)

private void startPlaying() { 
    mPlayer = new MediaPlayer(); 
    try { 
     mPlayer.setDataSource(mFileName); 

     BassBoost bassBoost = new BassBoost(0, mPlayer.getAudioSessionId()); 
     mPlayer.attachAuxEffect(bassBoost.getId()); 
     bassBoost.setStrength((short)1000); 
     bassBoost.setEnabled(true); 
     mPlayer.setAuxEffectSendLevel(1.0f); 

     mPlayer.prepare(); 

     mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mPlayer.start(); 
      } 
     }); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     throw new RuntimeException(e); 
    } 
     } 

當我嘗試,它是安靜的,我得到的錯誤(-22,0)日誌。如果我評論BassBoost bassBoost = ...mPlayer.setAuxEffectSendLevel之間的界限,它會播放聲音OK。

我雖然去了文檔,但我無法找到錯誤。清單中的權限:

<uses-permission android:name="android.permission.RECORD_AUDIO"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 
+0

真的?沒有答案? – Trick

+0

您有任何有關此問題的答案或解決方案嗎?或者在Media Player中實現BassBooster? –

+0

其實我沒有找到解決辦法。我用'SoundPool'完成了我的效果。 – Trick

回答

1

您創建時已將您的bassboost與您的mediaplayer相連接。所以刪除此行mPlayer.attachAuxEffect(bassBoost.getId());

+2

雖然這個代碼塊可能會回答這個問題,但如果你能提供一些爲什麼它可以提供這個問題,那麼最好的解釋是最好的。 – DavidPostill

+0

據我所知:調用'attachAuxEffect'將它添加到效果列表中。如果該效果已經在列表中,則會導致錯誤。 「MediaPlayer」中顯示的方式是調用「OnErrorListener」。我自己看到了這一點,直到這個答案才得以解決。其次,我認爲保留對「BassBoost」的引用是必需的,但我沒有證實 –

0

是的,從媒體播放器類中刪除的方法attachAuxEffect,我的意思是linemPlayer.attachAuxEffect(bassBoost.getId());

其次,你可以在媒體播放器的任何狀態調用bass boost對象不包括閒置狀態