/** * Copyright (C) 2013 Gundog Studios LLC. * * This program 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. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package com.gundogstudios.modules; import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnPreparedListener; public class AndroidAudio implements AudioModule { private static final String TAG = "AndroidAudio"; private MediaPlayer mediaPlayer; private String playing; private AssetManager assetManager; public AndroidAudio(AssetManager assetManager) { this.assetManager = assetManager; this.mediaPlayer = null; playing = null; } @Override public void play(final String fileName, boolean resumeIfPlaying) { try { if (resumeIfPlaying && mediaPlayer != null && playing != null && playing.equals(fileName)) { if (!mediaPlayer.isPlaying()) mediaPlayer.start(); } else { if (mediaPlayer == null) { mediaPlayer = new MediaPlayer(); } mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.setOnCompletionListener(null); prepare(fileName + "_main.mp3", true); } }); prepare(fileName + "_intro.mp3", false); } } catch (Exception e) { Modules.LOG.error(TAG, e.toString()); } } private void prepare(String fileName, boolean looping) { Modules.LOG.info(TAG, "Preparing: " + fileName); try { mediaPlayer.reset(); mediaPlayer.setLooping(looping); mediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } }); AssetFileDescriptor afd = assetManager.openFd("music/" + fileName); mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mediaPlayer.prepareAsync(); playing = fileName; } catch (Exception e) { Modules.LOG.error(TAG, e.toString()); } } @Override public void pause() { if (mediaPlayer != null && mediaPlayer.isPlaying()) mediaPlayer.pause(); } @Override public void shutdown() { if (mediaPlayer != null) { mediaPlayer.release(); mediaPlayer = null; playing = null; } } }