我正在开展一个项目,我必须在一个活动中加载6种不同的声音,并在按钮点击时播放所有声音.声音文件不是那么大,但问题是它们可能会更多.所以我的问题是这是在单个活动中加载声音文件的最快方法.出于测试目的,我使用res / raw文件夹存储声音文件并尝试使用两种不同的方法播放文件,但结果并不满足我.这是两种不同类型的代码:

方法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);

};

但问题是这两种方法都很慢.我需要找到一种更快速播放声音的方法..但是现在我点击按钮播放声音后差不多一秒钟.

你可以给我一些建议如何更快地播放声音.我应该在应用程序启动时将它们加载到缓存中,或者将它们保存在数据库或其他地方(我不认为数据库是一个很好的选择,但事实上,我想听一些建议).或者可以从assets文件夹加载它们,但我认为它仍然会很慢.

那么任何想法或建议?

提前致谢!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐