2012-09-26 27 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对象不包括闲置状态