Archive for julio, 2011

Ejecutar un audio constante en Android

viernes, julio 29th, 2011

Cuando se programa un juego por lo general se requiere escuchar dentro del juego una musica constante. Para ello se genera un clase para que este audio constante pueda ejecutarse en un loop infinito

import android.app.Activity;
import android.os.Bundle;
import cl.aro.android.AudioConstante;

public class Main extends Activity{
	AudioConstante audio;
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//      startService(new Intent(this, servicio.class));
        audio = getAudioConstante(R.raw.uno);
        audio.play();
        setContentView(new juegoView(this));
    }

    protected AudioConstante getAudioConstante(int id) {
    	return new AudioConstante(getBaseContext(), id);
    }
}

El codigo de la clase de audio sería

package cl.aro.android;

import android.content.Context;
import android.media.MediaPlayer;

public class AudioConstante {
	private MediaPlayer mediaPlayer;
	private boolean estaSonando = false;
	private boolean enLoop = false;

	public AudioConstante(Context ctx, int resID) {
		mediaPlayer = MediaPlayer.create(ctx, resID);
		mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
			@Override
			public void onCompletion(MediaPlayer mp) {
				estaSonando = false;
				if (enLoop) {
					mp.start();
				}
			}
		});
		mediaPlayer.start();
	}

	public synchronized void play() {
		if (estaSonando)
			return;
		if (mediaPlayer != null) {
			estaSonando = true;
			mediaPlayer.start();
		}
	}

	public synchronized void stop() {
		try {
			enLoop = false;
			if (estaSonando) {
				estaSonando = false;
				mediaPlayer.pause();
			}
		} catch (Exception e) {
			System.err.println("Error");
		}
	}

	public synchronized void loop() {
		enLoop = true;
		estaSonando = true;
		mediaPlayer.start();
	}

	public void release() {
		if (mediaPlayer != null) {
			mediaPlayer.release();
			mediaPlayer = null;
		}
	}
}