Reproducir sonido usando soundpool ejemplo


Soy muy principiante en la programación de Android, y me gustaría aprender a usar el método soundpool, tuve que buscar al respecto, pero todo lo que encontré no parece fácil de entender! Me gustaría que me mostraras un ejemplo muy simple que ejecuta 2 sonidos.

Author: Idan, 2013-06-12

4 answers

Crea una carpeta llamada raw bajo your_app/res/. Luego pegue su tono de llamada en esta carpeta, por ejemplo your_app/res/ringtone.mp3. Ahora use el siguiente código:

SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
int soundId = soundPool.load(context, R.raw.ringtone, 1);
// soundId for reuse later on

soundPool.play(soundId, 1, 1, 0, 0, 1);

Asegúrese de liberar los recursos de SoundPool después de su uso:

soundPool.release();
soundPool = null;
 54
Author: TheFlash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-09 12:42:28

Sí. yo también pasé por esto. pero por seguridad he guardado un fragmento de código que encontré en línea. Aunque no lo he usado, sé que pronto será útil...

1) Necesitas crear el objeto AudioAttributes:

AudioAttributes attributes = new AudioAttributes.Builder()
    .setUsage(AudioAttributes.USAGE_GAME)
    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
    .build();

2) Crear objeto SoundPool:

SoundPool sounds = new SoundPool.Builder()
    .setAudioAttributes(attributes)
    .build();

3) Cómo usar SoundPool en todos los niveles de API ejemplo:

SoundPool sound;

protected void createSoundPool() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        createNewSoundPool();
    } else {
        createOldSoundPool();
    }
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
protected void createNewSoundPool(){
    AudioAttributes attributes = new AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_GAME)
        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
        .build();
    sounds = new SoundPool.Builder()
        .setAudioAttributes(attributes)
        .build();
}

@SuppressWarnings("deprecation")
protected void createOldSoundPool(){
    sounds = new SoundPool(5,AudioManager.STREAM_MUSIC,0);
}
 48
Author: user3833732,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-23 09:02:04

He escrito un SoundPoolManager que se puede usar para cargar archivos de sonido y reproducirlos cuando sea necesario. Puedes verlo aquí.

Gracias.

 4
Author: Ashwani K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-22 07:58:35

Aquí hay un pequeño, trabajo ejemplo de soundPool, se toma de aquí y ligeramente modificado para que coincida con post 21 API.

Una cosa a tener en cuenta es maxStreams, que indica cuántas secuencias se permiten ejecutar en paralelo, si es una(por defecto), se puede eliminar del constructor.

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;

public class SoundManager extends Activity
{
  static SoundPool soundPool;
  static int[] sm;

  public static void InitSound() {

    int maxStreams = 1;
    Context mContext = getApplicationContext();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        soundPool = new SoundPool.Builder()
                .setMaxStreams(maxStreams)
                .build();
    } else {
        soundPool = new SoundPool(maxStreams, AudioManager.STREAM_MUSIC, 0);
    }

    sm = new int[3];
    // fill your sounds
    sm[0] = soundPool.load(mContext, R.raw.sound_1, 1);
    sm[1] = soundPool.load(mContext, R.raw.sound_2, 1);
    sm[2] = soundPool.load(mContext, R.raw.sound_3, 1);

  }

  static void playSound(int sound) {

      soundPool.play(sm[sound], 1, 1, 1, 0, 1f);
  }

   public final void cleanUpIfEnd() {
    sm = null;
    soundPool.release();
    soundPool = null;
  } 
}
 2
Author: Idan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-10 08:07:50