android - studio - Reproducir sonido usando el ejemplo de Soundpool
reproducir un sonido en android (4)
Aquí hay un ejemplo pequeño y funcional de soundPool
, se toma de here y se modifica ligeramente para que coincida con las 21 API posteriores.
Una cosa para notar es maxStreams
, que indica cuántas secuencias se pueden ejecutar en paralelo, si es una (por defecto), se puede eliminar del generador.
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;
}
}
Soy muy principiante con la programación de Android, y me gustaría aprender a usar el método de soundpool
, tuve una búsqueda al respecto, pero todo lo que encontré parece no ser fácil de entender. Me gustaría que me muestres un ejemplo muy simple que ejecuta 2 sonidos.
Crea una carpeta con el nombre raw en your_app/res/
. Luego pegue el tono de llamada en esta carpeta, por ejemplo your_app/res/ringtone.mp3
. Ahora usa el siguiente código:
SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
/** soundId for Later handling of sound pool **/
int soundId = sp.load(context, R.raw.windows_8_notify, 1); // in 2nd param u have to pass your desire ringtone
sp.play(soundId, 1, 1, 0, 0, 1);
MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.windows_8_notify); // in 2nd param u have to pass your desire ringtone
//mPlayer.prepare();
mPlayer.start();
Asegúrese de liberar los recursos de SoundPool después de su uso:
sp.setOnLoadCompleteListener(new OnLoadCompleteListener()
{
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,int status) {
}
});
He escrito un SoundPoolManager que se puede usar para cargar archivos de sonido y reproducirlos cuando sea necesario. Puedes verlo here .
Gracias.
Sí. Pasé por esto también. pero por seguridad, he guardado un código que encontré en línea. Aunque no lo he usado, sé que será útil pronto ...
1) Necesita crear un objeto AudioAttributes:
AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
2) Crear el 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);
}