web-dev-qa-db-ja.com

サウンドプールの例を使用してサウンドを再生する

soundpoolメソッドの使用方法を学びたいです。 2つのサウンドを実行する非常に簡単な例を示してください。

46
Sally Gomez

your_app/res/の下にrawという名前のフォルダーを作成します。次に、your_app/res/ringtone.mp3などの着信音をこのフォルダーに貼り付けます。次のコードを使用します。

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

使用後は必ずSoundPoolリソースを解放してください。

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

はい。私もこれを経験しました。しかし、安全のために、オンラインで見つけたコードを保存しました。使用していませんが、すぐに役立つと思います...

1)AudioAttributesオブジェクトを作成する必要があります:

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

2)SoundPoolオブジェクトを作成します。

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

3)すべてのAPIレベルでSoundPoolを使用する方法の例:

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

以下はsoundPoolの小さなworkingの例です。これは here から取られ、21のAPIに一致するようにわずかに変更されています。

注目すべき点の1つはmaxStreamsです。これは、並行して実行できるストリームの数を示します。1つ(デフォルト)であれば、ビルダーから削除できます。

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

サウンドファイルをロードし、必要に応じて再生するために使用できるSoundPoolManagerを作成しました。それを見ることができます こちら

ありがとう。

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