Я работаю над проектом, в котором мне нужно загрузить 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);
};
Но проблема в том, что оба метода медленны ... Мне нужно найти способ более быстрого воспроизведения звуков ... но теперь, когда я нажимаю кнопку, остается почти секунда, чтобы воспроизвести звук.
Можете ли вы дать мне несколько советов, как играть саунд быстрее. Должен ли я загружать их в кеш при запуске приложения или сохранять их в базе данных или где-то еще (я не думаю, что база данных является хорошим вариантом на самом деле, бно я хочу услышать некоторые предложения). Или, может быть, загрузить их из папки активов, но я думаю, что это все еще будет медленно.
Так какие-нибудь идеи или предложения?Заранее спасибо!