/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.effectstest;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View.OnClickListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.ToggleButton;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.media.AudioManager;
import android.media.MediaPlayer;
import java.nio.ByteOrder;
import java.nio.ByteBuffer;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class SimplePlayer implements OnClickListener {
private final static String TAG = "SimplePlayer";
int mPlayPauseButtonId;
int mStopButtonId;
Context mContext;
ImageView mPlayPauseButton;
int mPlayImageResource;
int mPauseImageResource;
String mFileName;
int mFileResId;
MediaPlayer mMediaPlayer;
int mStreamType;
int mSession;
float mSendLevel = (float)0.5;
int mEffectId = 0;
TextView mSessionText;
SimplePlayer(Context context, int playPausebuttonId, ImageView playPausebutton,
int stopButtonId, ImageView stopButton, TextView sessionText, String fileName, int stream, int session)
{
set(context, playPausebuttonId, playPausebutton, stopButtonId, stopButton, sessionText, stream, session);
mFileName = fileName;
}
SimplePlayer(Context context, int playPausebuttonId, ImageView playPausebutton,
int stopButtonId, ImageView stopButton, TextView sessionText, int fileResId, int stream, int session) {
set(context, playPausebuttonId, playPausebutton, stopButtonId, stopButton, sessionText, stream, session);
mFileResId = fileResId;
mFileName = "";
}
public void set(Context context, int playPausebuttonId, ImageView playPausebutton,
int stopButtonId, ImageView stopButton, TextView sessionText, int stream, int session) {
mContext = context;
mPlayPauseButtonId = playPausebuttonId;
mStopButtonId = stopButtonId;
mPlayPauseButton = (ImageButton) playPausebutton;
ImageButton stop = (ImageButton) stopButton;
mPlayPauseButton.setOnClickListener(this);
mPlayPauseButton.requestFocus();
stop.setOnClickListener(this);
mPlayImageResource = android.R.drawable.ic_media_play;
mPauseImageResource = android.R.drawable.ic_media_pause;
mStreamType = stream;
mSession = session;
mSessionText = sessionText;
}
public void onClick(View v) {
if (v.getId() == mPlayPauseButtonId) {
playOrPause();
} else if (v.getId() == mStopButtonId) {
stop();
}
}
public void playOrPause() {
if (mMediaPlayer == null || !mMediaPlayer.isPlaying()){
if (mMediaPlayer == null) {
try {
mMediaPlayer = new MediaPlayer();
if (mSession != 0) {
mMediaPlayer.setAudioSessionId(mSession);
Log.d(TAG, "mMediaPlayer.setAudioSessionId(): "+ mSession);
}
if (mFileName.equals("")) {
Log.d(TAG, "Playing from resource");
AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(mFileResId);
mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
} else {
Log.d(TAG, "Playing file: "+mFileName);
mMediaPlayer.setDataSource(mFileName);
}
mMediaPlayer.setAudioStreamType(mStreamType);
mMediaPlayer.prepare();
mMediaPlayer.setLooping(true);
} catch (IOException ex) {
Log.e(TAG, "mMediaPlayercreate failed:", ex);
mMediaPlayer = null;
} catch (IllegalArgumentException ex) {
Log.e(TAG, "mMediaPlayercreate failed:", ex);
mMediaPlayer = null;
} catch (SecurityException ex) {
Log.e(TAG, "mMediaPlayercreate failed:", ex);
mMediaPlayer = null;
}
if (mMediaPlayer != null) {
mMediaPlayer.setAuxEffectSendLevel(mSendLevel);
mMediaPlayer.attachAuxEffect(mEffectId);
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
updatePlayPauseButton();
}
});
mSessionText.setText("Session: "+Integer.toString(mMediaPlayer.getAudioSessionId()));
}
}
if (mMediaPlayer != null) {
mMediaPlayer.start();
}
} else {
mMediaPlayer.pause();
}
updatePlayPauseButton();
}
public void stop() {
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
updatePlayPauseButton();
}
public boolean isPlaying() {
if (mMediaPlayer != null) {
return mMediaPlayer.isPlaying();
} else {
return false;
}
}
public void updatePlayPauseButton() {
mPlayPauseButton.setImageResource(isPlaying() ? mPauseImageResource : mPlayImageResource);
}
public void attachAuxEffect(int effectId) {
mEffectId = effectId;
if (mMediaPlayer != null) {
Log.d(TAG,"attach effect: "+effectId);
mMediaPlayer.attachAuxEffect(effectId);
}
}
public void setAuxEffectSendLevel(float level) {
mSendLevel = level;
if (mMediaPlayer != null) {
mMediaPlayer.setAuxEffectSendLevel(level);
}
}
public void setContext(Context context) {
mContext = context;
}
}