Home | History | Annotate | Download | only in effectstest
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.effectstest;
     18 
     19 import android.content.Context;
     20 import android.content.res.AssetFileDescriptor;
     21 import android.os.Bundle;
     22 import android.util.Log;
     23 import android.view.KeyEvent;
     24 import android.view.Menu;
     25 import android.view.View.OnClickListener;
     26 import android.view.View;
     27 import android.view.ViewGroup;
     28 import android.widget.Button;
     29 import android.widget.TextView;
     30 import android.widget.EditText;
     31 import android.widget.SeekBar;
     32 import android.widget.ToggleButton;
     33 import android.widget.CompoundButton;
     34 import android.widget.CompoundButton.OnCheckedChangeListener;
     35 import android.widget.ImageButton;
     36 import android.widget.ImageView;
     37 import android.media.AudioManager;
     38 import android.media.MediaPlayer;
     39 import java.nio.ByteOrder;
     40 import java.nio.ByteBuffer;
     41 import java.io.IOException;
     42 import java.util.HashMap;
     43 import java.util.Map;
     44 
     45 public class SimplePlayer implements OnClickListener {
     46 
     47     private final static String TAG = "SimplePlayer";
     48 
     49     int mPlayPauseButtonId;
     50     int mStopButtonId;
     51     Context mContext;
     52     ImageView mPlayPauseButton;
     53     int mPlayImageResource;
     54     int mPauseImageResource;
     55     String mFileName;
     56     int mFileResId;
     57     MediaPlayer mMediaPlayer;
     58     int mStreamType;
     59     int mSession;
     60     float mSendLevel = (float)0.5;
     61     int mEffectId = 0;
     62     TextView mSessionText;
     63 
     64     SimplePlayer(Context context, int playPausebuttonId, ImageView playPausebutton,
     65                 int stopButtonId, ImageView stopButton, TextView sessionText, String fileName, int stream, int session)
     66     {
     67         set(context, playPausebuttonId, playPausebutton, stopButtonId, stopButton, sessionText, stream, session);
     68         mFileName = fileName;
     69     }
     70 
     71     SimplePlayer(Context context, int playPausebuttonId, ImageView playPausebutton,
     72             int stopButtonId, ImageView stopButton, TextView sessionText, int fileResId, int stream, int session) {
     73         set(context, playPausebuttonId, playPausebutton, stopButtonId, stopButton, sessionText, stream, session);
     74         mFileResId = fileResId;
     75         mFileName = "";
     76     }
     77 
     78     public void set(Context context, int playPausebuttonId, ImageView playPausebutton,
     79             int stopButtonId, ImageView stopButton, TextView sessionText, int stream, int session) {
     80         mContext = context;
     81         mPlayPauseButtonId = playPausebuttonId;
     82         mStopButtonId = stopButtonId;
     83         mPlayPauseButton = (ImageButton) playPausebutton;
     84         ImageButton stop = (ImageButton) stopButton;
     85 
     86         mPlayPauseButton.setOnClickListener(this);
     87         mPlayPauseButton.requestFocus();
     88         stop.setOnClickListener(this);
     89 
     90         mPlayImageResource = android.R.drawable.ic_media_play;
     91         mPauseImageResource = android.R.drawable.ic_media_pause;
     92         mStreamType = stream;
     93         mSession = session;
     94         mSessionText = sessionText;
     95     }
     96 
     97 
     98     public void onClick(View v) {
     99         if (v.getId() == mPlayPauseButtonId) {
    100             playOrPause();
    101         } else if (v.getId() == mStopButtonId) {
    102             stop();
    103         }
    104     }
    105 
    106     public void playOrPause() {
    107         if (mMediaPlayer == null || !mMediaPlayer.isPlaying()){
    108               if (mMediaPlayer == null) {
    109                   try {
    110                       mMediaPlayer = new MediaPlayer();
    111                       if (mSession != 0) {
    112                           mMediaPlayer.setAudioSessionId(mSession);
    113                           Log.d(TAG, "mMediaPlayer.setAudioSessionId(): "+ mSession);
    114                       }
    115 
    116                       if (mFileName.equals("")) {
    117                           Log.d(TAG, "Playing from resource");
    118                           AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(mFileResId);
    119                           mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
    120                           afd.close();
    121                       } else {
    122                           Log.d(TAG, "Playing file: "+mFileName);
    123                           mMediaPlayer.setDataSource(mFileName);
    124                       }
    125                       mMediaPlayer.setAudioStreamType(mStreamType);
    126                       mMediaPlayer.prepare();
    127                       mMediaPlayer.setLooping(true);
    128                   } catch (IOException ex) {
    129                       Log.e(TAG, "mMediaPlayercreate failed:", ex);
    130                       mMediaPlayer = null;
    131                   } catch (IllegalArgumentException ex) {
    132                       Log.e(TAG, "mMediaPlayercreate failed:", ex);
    133                       mMediaPlayer = null;
    134                   } catch (SecurityException ex) {
    135                       Log.e(TAG, "mMediaPlayercreate failed:", ex);
    136                       mMediaPlayer = null;
    137                   }
    138 
    139                   if (mMediaPlayer != null) {
    140                       mMediaPlayer.setAuxEffectSendLevel(mSendLevel);
    141                       mMediaPlayer.attachAuxEffect(mEffectId);
    142                       mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    143                           public void onCompletion(MediaPlayer mp) {
    144                               updatePlayPauseButton();
    145                           }
    146                       });
    147                       mSessionText.setText("Session: "+Integer.toString(mMediaPlayer.getAudioSessionId()));
    148                   }
    149               }
    150               if (mMediaPlayer != null) {
    151                   mMediaPlayer.start();
    152               }
    153           } else {
    154               mMediaPlayer.pause();
    155           }
    156           updatePlayPauseButton();
    157     }
    158 
    159     public void stop() {
    160       if (mMediaPlayer != null) {
    161           mMediaPlayer.stop();
    162           mMediaPlayer.release();
    163           mMediaPlayer = null;
    164       }
    165       updatePlayPauseButton();
    166     }
    167 
    168     public boolean isPlaying() {
    169         if (mMediaPlayer != null) {
    170             return mMediaPlayer.isPlaying();
    171         } else {
    172             return false;
    173         }
    174     }
    175 
    176     public void updatePlayPauseButton() {
    177         mPlayPauseButton.setImageResource(isPlaying() ? mPauseImageResource : mPlayImageResource);
    178     }
    179 
    180     public void attachAuxEffect(int effectId) {
    181         mEffectId = effectId;
    182         if (mMediaPlayer != null) {
    183             Log.d(TAG,"attach effect: "+effectId);
    184             mMediaPlayer.attachAuxEffect(effectId);
    185         }
    186     }
    187     public void setAuxEffectSendLevel(float level) {
    188         mSendLevel = level;
    189         if (mMediaPlayer != null) {
    190             mMediaPlayer.setAuxEffectSendLevel(level);
    191         }
    192     }
    193 
    194     public void setContext(Context context) {
    195         mContext = context;
    196     }
    197 }
    198