sabato 20 ottobre 2012

Riproduzione di un suono con un click in Android

E' possibile eseguire un suono in un'applicazione android inserendo inizialmente il file da riprodurre nella directory "raw" del progetto android e successivamente integrare queste righe di codice.
In questo esempio sono stati utilizzati due file in formato wav posizionati nei path "\res\raw\bip_1.wav" e "\res\raw\bip_2.wav" che verranno riprodotti rispettivamente al click dei pulsanti "btn_ok" e "btn_no"
public class Example extends Activity {

 private SoundManager soundManager = new SoundManager();

 public void onCreate(Bundle savedInstanceState) {  
  super.onCreate(savedInstanceState);  
  setContentView(R.layout.example); 

  soundManager.initSound(getBaseContext());
  soundManager.addSound(1, R.raw.bip_1);
  soundManager.addSound(2, R.raw.bip_2);
  
  /* ... */
  
  Button btnOk = (Button) findViewById(R.id.btn_ok);
  btnOk.setOnClickListener(new OnClickListener() {
   public void onClick(View arg0) {
     soundManager.playSound(1);
   }
  });
  
  Button btnNo = (Button) findViewById(R.id.btn_no);
  btnNo.setOnClickListener(new OnClickListener() {
   public void onClick(View arg0) {
     soundManager.playSound(2);
   }
  });
 }
}
Classe da istanziare:
public class SoundManager {
 private SoundPool soundPool;
 private HashMap hMap;
 private AudioManager audioManager;
 private Context context;

 public void initSound(Context theContext) {
  context = theContext;
  soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
  hMap = new HashMap();
  audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
 }

 public void addSound(int index, int SoundID)
 {
  hMap.put(index, soundPool.load(context, SoundID, 1));
 }
 public void playSound(int index)
 {
  float streamVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
  soundPool.play((Integer) hMap.get(index), streamVolume, streamVolume, 1, 0, 1f);
 }
}