MediaPlayer vs SoundPool только для 1 одновременного потока

Я работаю над игрой, в которой каждый раз при встряхивании телефона воспроизводится один звук. Имеет ли смысл использовать SoundPool и загружать звуки в onCreate моей активности, или можно каждый раз создавать медиаплеер, как показано ниже:

private void onShake() {
    MediaPlayer mp= MediaPlayer.create(this, whipSound[currentWhip][force]);   
    mp.start();
}

Я предполагаю, что SoundPool лучше, потому что звуки загружаются только один раз. Я прав?

Спасибо

Жюльен


person jul    schedule 17.03.2011    source источник


Ответы (2)


Как и ожидалось, SoundPool намного быстрее...

person jul    schedule 17.03.2011

Вы можете создать mediaPlayer вне метода onShake, а затем сбросить и запускать его при каждом встряхивании:

MediaPlayer mp= MediaPlayer.create(this, whipSound[currentWhip][force]);
...
private void onShake() {
    mp.reset();
    mp.start();
}

//or

private void onShake() {
   try {
        mp.stop();
        mp.prepare();
    } catch (IllegalStateException e) { /* Ignore */
    } catch (IOException e) {/* Ignore */ }
   try { 
        mp.start(); 
    } catch (IllegalStateException e) {
        Log.e(TAG, "MediaPlayer failed ", e);
   }
}
person marcosbeirigo    schedule 17.03.2011
comment
Я должен загружать звук каждый раз, потому что он может отличаться в зависимости от интенсивности дрожания. Я использовал SoundPool, и это намного быстрее. - person jul; 17.03.2011