我正在一个项目中,我必须在一个活动中加载6个不同的声音,并播放所有声音按钮click.The声音文件并不大,但问题是,他们可能会更多。所以我的问题是哪个是加载声音文件在单个活动中最快的方式。出于测试目的,我使用了res/raw文件夹来存储声音文件并尝试用两种不同的方法播放这些文件,但结果并不满意me.Here是两种不同类型的代码:Android最快的方式来加载和播放应用程序中的声音
方法1:
Button first = (Button) findViewById(R.id.one);
Button second = (Button) findViewById(R.id.two);
first.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MediaPlayer mp = MediaPlayer.create(SoundFXActivity.this, R.raw.drumtwo);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
}
});
second.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MediaPlayer mp = MediaPlayer.create(SoundFXActivity.this, R.raw.drumone);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
}
});
方法2:
private SoundPool spool;
private int soundID,soundID2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
spool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundID = spool.load(this, R.raw.drumone, 1);
soundID2 = spool.load(this, R.raw.drumtwo, 1);
Button three = (Button) findViewById(R.id.three);
three.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Sound();
}
});
}
public void Sound(){
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
spool.play(soundID, volume, volume, 1, 0, 1f);
};
但问题是,这两种方法都需要slow..I要找到一种方法来发挥sounds..but现在有像几乎一秒钟后更快的方法我点击按钮播放声音。
你可以给我一些建议,如何更快地播放sounda。应用程序启动时应该将它们加载到缓存中还是将它们保存在数据库或其他地方(我不认为数据库是一个很好的选择事实上,但我想听到一些建议)。或者可能从资产文件夹中加载它们,但我认为它仍然会很慢。
有没有想法或建议? 在此先感谢!
您是否尝试过预加载媒体?鉴于你没有太多。 – Jack
其实不是,我现在唯一试过的就是这两个方法在问题中提到。 –