Estoy creando un juego en Android y he solucionado este problema por un tiempo, y ahora estoy volviendo a él. En mi juego tengo un ritmo de fondo, disparos, explosiones ... etc. y necesito poder jugarlos simultáneamente. En este momento, cuando llamo a jugar en la clase SoundPool, el sonido que se reproduce se interrumpe y el nuevo comienza a reproducirse. Mi clase SoundManager está abajo, así como el uso. Cualquier ayuda sería muy apreciada ya que este es realmente mi primer juego donde he necesitado muchos efectos de sonido. ¡Gracias!Reproducción de sonidos simultáneamente Android
public class SoundManager {
private SoundPool mSoundPool;
private HashMap<Integer, Integer> mSoundPoolMap;
private AudioManager mAudioManager;
private Context mContext;
public SoundManager(Context theContext) {
mContext = theContext;
mSoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
mSoundPoolMap = new HashMap<Integer, Integer>();
mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
}
public void addSound(int index, int SoundID) {
mSoundPoolMap.put(index, mSoundPool.load(mContext, SoundID, 1));
}
public void playSound(int index) {
float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
streamVolume = streamVolume/mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
mSoundPool.play((Integer) mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f);
}
public void playLoopedSound(int index) {
float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume/mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mSoundPool.play((Integer) mSoundPoolMap.get(index), streamVolume, streamVolume, 1, -1, 1f);
}
}
... y aquí hay un ejemplo de cómo uso la clase.
SoundManager sm = new SoundManager(this);
sm.addSound(0, R.raw.explosion);
sm.playSound(0);
... Así que con este estilo agrego todos mis sonidos a la soundpool de la carga y luego sobre la base de la entrada del usuario sólo quiero reproducir el sonido. ¿Esto parece correcto? ¿O debería tratar de hacerlo de otra manera?
¡Es bueno saber que no olvides aceptar tu propia respuesta! – schwiz
¡gracias por recordarme! – DRiFTy
¿Puedo preguntar cuáles son sus motivos para usar STREAM_MUSIC y STREAM_RING en su código? ¿Es este un caso de uso especial? – Salx