/* * This file is part of WhereYouGo. * * WhereYouGo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WhereYouGo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WhereYouGo. If not, see <http://www.gnu.org/licenses/>. * * Copyright (C) 2012 Menion <whereyougo@asamm.cz> */ package menion.android.whereyougo.utils.audio; import menion.android.whereyougo.utils.Logger; import android.content.Context; import android.media.MediaPlayer; import android.net.Uri; public class AudioClip { private static final String TAG = "AudioClip"; private MediaPlayer mPlayer; private String name; private boolean mPlaying = false; private boolean mLoop = false; private int playCount = 0; private AudioListener listener; public interface AudioListener { public void playCompleted(); } public AudioClip(Context ctx, int resID) { name = ctx.getResources().getResourceName(resID); mPlayer = MediaPlayer.create(ctx, resID); initMediaPlayer(); } public AudioClip(Context ctx, Uri soundUri) { mPlayer = MediaPlayer.create(ctx, soundUri); initMediaPlayer(); } private void initMediaPlayer() { mPlayer.setVolume(1000, 1000); mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){ public void onCompletion(MediaPlayer mp) { mPlaying = false; if (mLoop) { System.out.println("AudioClip loop " + name); mp.start(); } else if (playCount > 0) { playCount--; mp.start(); } else { // really finished if (listener != null) listener.playCompleted(); } } }); } public void registeListener(AudioListener listener) { this.listener = listener; } public synchronized void play() { if (mPlaying) return; if (mPlayer != null) { mPlaying = true; mPlayer.start(); } } public synchronized void play(int count) { if (mPlaying) return; this.playCount = count - 1; if (mPlayer != null) { mPlaying = true; mPlayer.start(); } } public synchronized void stop() { try { mLoop = false; if (mPlaying) { mPlaying = false; mPlayer.pause(); } } catch (Exception e) { System.err.println("AduioClip::stop " + name + " " + e.toString()); } } public synchronized void loop() { mLoop = true; mPlaying = true; mPlayer.start(); } public void release() { if (mPlayer != null) { mPlayer.release(); mPlayer = null; } } public static void destroyAudio(AudioClip mAudio) { try { if (mAudio != null) { mAudio.stop(); mAudio.release(); } } catch (Exception e) { Logger.e(TAG, "destroyAudio()", e); } finally { mAudio = null; } } }