web-dev-qa-db-fra.com

Jouer du son en utilisant l'exemple de soundpool

J'aimerais apprendre à utiliser la méthode soundpool. Je voudrais que vous me montriez un exemple très simple qui utilise 2 sons.

46
Sally Gomez

Créez un dossier nommé raw sous your_app/res/. Collez ensuite votre sonnerie dans ce dossier, par exemple your_app/res/ringtone.mp3. Maintenant, utilisez le code suivant:

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);

Assurez-vous de libérer les ressources SoundPool après utilisation:

soundPool.release();
soundPool = null;
63
TheFlash

Oui. J'ai traversé ça aussi. mais pour des raisons de sécurité, j'ai sauvegardé un morceau de code trouvé en ligne. Bien que je ne l'ait pas utilisé, je sais qu'il sera bientôt utile ...

1) Vous devez créer un objet AudioAttributes:

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

2) Créer un objet SoundPool:

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

3) Comment utiliser SoundPool sur tous les niveaux d’API, par exemple:

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);
}
51
user3833732

Voici un petit exemple de travail de soundPool, tiré de ici et légèrement modifié pour correspondre à poste 21 API.

Une chose à noter est maxStreams, qui indique le nombre de flux pouvant être exécutés en parallèle. S'il en existe un (valeur par défaut), il peut être supprimé du générateur.

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;
  } 
}
6
Idan

J'ai écrit un SoundPoolManager qui peut être utilisé pour charger des fichiers audio et jouer selon les besoins. Vous pouvez le voir ici .

Merci.

4
Ashwani K
private final int NUMBER_OF_SIMULTANEOUS_SOUNDS = 5;
        private final int LEFT_VOLUME_VALUE = 1.0f;
        private final int RIGHT_VOLUME_VALUE = 1.0f;
        private final int MUSIC_LOOP = 0;
        private final int SOUND_PLAY_PRIORITY = 0;
        private final float PLAY_RATE= 1.0f;


        SoundPool soundPool;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
            soundPool= new SoundPool.Builder()
                    .setMaxStreams(NUMBER_OF_SIMULTANEOUS_SOUNDS)
                    .build();
        } else {
            // Deprecated way of creating a SoundPool before Android API 21.
            soundPool= new SoundPool(NUMBER_OF_SIMULTANEOUS_SOUNDS, AudioManager.STREAM_MUSIC, 0);
        }
        int soundId = soundPool.load(getApplicationContext(), R.raw.sound_1, 1);

        soundPool.play(soundId , LEFT_VOLUME_VALUE , RIGHT_VOLUME_VALUE, SOUND_PLAY_PRIORITY , MUSIC_LOOP ,PLAY_RATE);
1
Ajay Prajapati