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
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en