package com.aiti.playsound;
//play car_idle and adjust playback rate using soundpool
//Mar 5 10 Bob G
//Apr 29 10 Bob G add beep4 on touch

import java.util.HashMap;

import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.TextView;

public class playsound extends Activity implements OnGestureListener{
    public GestureDetector gd;
    public SoundPool soundPool;
    public HashMap<Integer, Integer> soundPoolMap;
    public int soundkey1,soundkey2; //from put?
    public int soundid1,soundid2;  //from load
    public int streamid1,streamid2; //from play
    public final float MAXRATE=1.5f; //docs say 2.0, scuttlebutt says
1.5
    public final float NORMRATE=1.0f;
    public final float MINRATE=0.5f;
    public float rate1=MINRATE;
    public float rate2=NORMRATE;
    public final float MAXVOL=(float)1.0;
    public final float MINVOL=(float)0.01;
    public final float HALFVOL=(float)0.707;
    public float vol1=MAXVOL;
    public float vol2=HALFVOL;
    public final int LOOPON= -1;
    public final int LOOPOFF=0;
    public static TextView tv;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);
        gd=new GestureDetector(this);
        tv = new TextView(this);
        setContentView(tv);
//        tv.setText("in oncreate\n");

        soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
        soundPoolMap = new HashMap<Integer, Integer>();
//        tv.setText("after soundpoolmap\n");
        soundid1= soundPool.load(getBaseContext(), R.raw.car_idle,
1);
        soundid2= soundPool.load(getBaseContext(), R.raw.beep4, 1);
//      tv.setText("after load\n");
        soundPoolMap.put(soundkey1, soundid1); //maps id to key?
        soundPoolMap.put(soundkey2, soundid2); //maps id to key?
//        tv.setText("after put\n");

        play1();
        play2();
    }//oncreate

    public void play1(){
        streamid1=soundPool.play(soundid1, vol1, vol1, 1, LOOPON,
rate1); //
        soundPool.setLoop(streamid1, LOOPON); //looping on
        soundPool.setRate(streamid1, MINRATE);

        tv.setText("after play1  streamid1= "+streamid1);
    }

    public void play2(){
        streamid2=soundPool.play(soundid2, vol2, vol2, 1, LOOPOFF,
rate2); //
//        soundPool.setLoop(streamid2, LOOPOFF); //looping off
//      soundPool.setRate(streamid2, NORMRATE);

        tv.append("\nafter play2  streamid2= "+streamid2);
    }

    public void adjVol(float k){
                vol1 *= k;
                if(vol1 > MAXVOL) vol1 = MAXVOL; //0db
                if(vol1 < MINVOL) vol1 = MINVOL; //-40db
                soundPool.setVolume(streamid1, vol1, vol1);
        }

    public void adjrate(float k){
                rate1 *= k;
                if(rate1 > MAXRATE) rate1 = MAXRATE;
                if(rate1 < MINRATE) rate1 = MINRATE;
                soundPool.setRate(streamid1, rate1);
        }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event){
        switch(keyCode){
        case KeyEvent.KEYCODE_DPAD_UP:    adjVol((float)1.414); break; //
3db up
        case KeyEvent.KEYCODE_DPAD_DOWN:  adjVol((float)0.707); break; //
3db down
        case KeyEvent.KEYCODE_DPAD_LEFT:  adjrate((float)0.9); break;  //
slower
        case KeyEvent.KEYCODE_DPAD_RIGHT: adjrate((float)1.1); break;  //
faster
        case KeyEvent.KEYCODE_DPAD_CENTER: play1(); break;
        default: return super.onKeyDown(keyCode, event);
        }//switch
        tv.append("\nrate "+rate1+" vol "+vol1);
        return true;
    }

        @Override
        public void onPause(){
                super.onPause();
                soundPool.pause(streamid1); //forum says pause doesnt work
                soundPool.stop(streamid1);
                soundPool.setLoop(streamid1, LOOPOFF);
                soundPool.setVolume(streamid1, MINVOL, MINVOL);

                soundPool.pause(streamid2); //forum says pause doesnt work
                soundPool.stop(streamid2);
                soundPool.setLoop(streamid2, LOOPOFF);
                soundPool.setVolume(streamid2, MINVOL, MINVOL);
        }

        @Override
        public void onResume(){
                super.onResume();
                soundPool.resume(streamid1);
        }

        @Override
        public void onStop(){
                super.onStop();
                soundPool.stop(streamid1);
                soundPool.setLoop(streamid1, LOOPOFF);
                soundPool.setVolume(streamid1, MINVOL, MINVOL);
        }

        @Override
        public void onDestroy(){
                super.onDestroy();
                soundPool.unload(soundid1);
                soundPool.unload(soundid2);
                soundPool.release();
        }

    @Override
    public boolean onTouchEvent(MotionEvent motionevent){
        if(motionevent.getAction()==motionevent.ACTION_DOWN) play2();
            return true;
    }

        @Override
        public boolean onDown(MotionEvent arg0) {
                // TODO Auto-generated method stub
                return false;
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float
velocityX,
                float velocityY) {
                // TODO Auto-generated method stub
                return false;
        }

        @Override
        public void onLongPress(MotionEvent e) {
                // TODO Auto-generated method stub
        }

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float
distanceX,
                float distanceY) {
                return false;
        }

        @Override
        public void onShowPress(MotionEvent e) {
                // TODO Auto-generated method stub
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
                // TODO Auto-generated method stub
                return false;
        }

}//activity
//--------------------eof--------------------------

-- 
You received this message because you are subscribed to the Google
Groups "Android Beginners" group.

NEW! Try asking and tagging your question on Stack Overflow at
http://stackoverflow.com/questions/tagged/android

To unsubscribe from this group, send email to
android-beginners+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en

Reply via email to