2013-06-12 39 views
0

我試圖在android ..中實現bassboost效果,但沒有任何效果。我使用下面的代碼來實現bassboost效果;(我試過使用全局音頻會話ID,並且我在清單文件中添加了權限) - >修改音頻設置..在android中的BassBoost效果

enter code here 

    BassBoost boost = new BassBoost(0,mp.getAudioSessionId()); 
    boost.setEnabled(true); 
    boost.setStrength((Short)1000); 
    mp.attachAuxEffect(boost.getId());--->if i use this i'm getting(-38,0) or else no effect       
    mp.setSendLevel(1.0f); 

我用下面的代碼爲低音增強effect.got媒體播放器(-38,0)error..please解決這個問題..

enter code here 
public class MainActivity extends Activity 
{ 

MediaPlayer mediaplayer; 
AssetFileDescriptor descriptor; 

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setVolumeControlStream(AudioManager.STREAM_MUSIC); 
setContentView(R.layout.activity_main); 
mediaplayer = new MediaPlayer(); 
mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

try { 
    descriptor = MainActivity.this.getAssets().openFd("Kalimba.mp3"); 
} catch (IOException e1) { 
    e1.printStackTrace(); 
} 
try { 
    mediaplayer.setDataSource(descriptor.getFileDescriptor(), 
       descriptor.getStartOffset(),         descriptor.getLength()); 


} catch (IllegalArgumentException e1) { 

    e1.printStackTrace(); 
} catch (IllegalStateException e1) { 

    e1.printStackTrace(); 
} catch (IOException e1) { 

    e1.printStackTrace(); 
} 
try { 
    descriptor.close(); 
} catch (IOException e1) { 

    e1.printStackTrace(); 
} 

setUpBooster(); 

mediaplayer.setOnPreparedListener(new OnPreparedListener() { 

    @Override 
    public void onPrepared(MediaPlayer mp) { 
     mp.start(); 
    } 
}); 



    } 

public void setUpBooster() { 

BassBoost booster = new BassBoost(0,0);//-->tried with sessionid also 
booster.setStrength((short) 1000); 
booster.setEnabled(true); 
mediaplayer.attachAuxEffect(booster.getId()); 
mediaplayer.setAuxEffectSendLevel(1.0f); 
try { 
    mediaplayer.prepare(); 
} catch (IllegalStateException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

} 


@Override 
public void onBackPressed() { 
super.onBackPressed(); 

    } 

} 
+0

當您調用'attachAuxEffect'時,您的'MediaPlayer'處於什麼狀態?您必須 - 至少 - 在附加效果之前調用了'setDataSource'。使用[queryEffects](http://developer.android.com/reference/android/media/audiofx/AudioEffect.html#queryEffects())確保您想要使用的效果實際上可用也是一個好主意。 – Michael

+0

我使用setDatasource ..我試圖從最近10天..有時..我會得到(-22,0)..有時(-38,0)..如果我不附加輔助效果媒體球員..然後沒有錯誤..但沒有效果.. – Bitfield

回答

0

錯誤38表示您要求MediaPlayer to do something when in the wrong state.您不會是able to fathom your error just from this

而且您隨時可以撥打setDataSource()就可以了,您需要再次登錄prepare()。把它看作加載文件,準備好播放。

編輯

您已經使用您的媒體播放器連接您的bassboost它創建時。因此刪除此mp.attachAuxEffect(boost.getId());