SoundPool è utilizzato per riprodurre audio brevi, come effetti sonori e notifiche. Con il metodo setMaxStream si definisce il numero massimo di suoni che possono essere riprodotti simultaneamente. Quando invece il file audio è stato caricato in memoria è pronto per essere riprodotto con il metodo setOnLoadCompleteListener.
In questo esempio andiamo a utilizzare un Builder per configurare gli attributi audio:
res/raw
sound-1.wav
activity_main.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:app=”http://schemas.android.com/apk/res-auto”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
tools:context=”.MainActivity”>
<Button
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:id=”@+id/button_play”
android:text=”Play”
app:layout_constraintBottom_toBottomOf=”parent”
app:layout_constraintLeft_toLeftOf=”parent”
app:layout_constraintRight_toRightOf=”parent”
app:layout_constraintTop_toTopOf=”parent” />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.example.soundPool;
import android.media.AudioAttributes;
import android.media.SoundPool;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
SoundPool soundPool;
int soundID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AudioAttributes audioAttributes=new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
soundPool=new SoundPool.Builder()
.setMaxStreams(5)
.setAudioAttributes(audioAttributes)
.build();
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener(){
@Override
public void onLoadComplete(SoundPool soundPool,int sampleId,int status){
if (status==0){
}
}
});
soundID=soundPool.load(this,R.raw.sound-1,1);
Button button_play=findViewById(R.id.button_play);
button_play.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
soundPool.play(soundID,1,1,0,0,1);
}
});
}
@Override
protected void onDestroy(){
super.onDestroy();
if(soundPool!= null){
soundPool.release();
soundPool=null;
}
}
}