package com.aiti.computedbeep;
//play buffer full of calculated samples using audiotrack
import android.app.Activity;
import android.graphics.Color;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.TextView;
public class computedbeep extends Activity implements OnGestureListener{
public AudioTrack at;
public TextView tv;
public GestureDetector gd;
public int minbufsizbytes;
public int bufsizbytes;
public int bufsizsamps;
public final int samprate = 8000;
public short[] buffer=null;
public final float f=2000.0f; //beep freq
public final float MAXVOL=(float)1.0;
public final float MINVOL=(float)0.01;
public float vol=MAXVOL;
public final int LOOPON= -1;
public final int LOOPOFF=0;
public int tmp;
/** 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.setTextColor(Color.WHITE);
// tv.setText("in oncreate\n"); //gets to here
minbufsizbytes = AudioTrack.getMinBufferSize(samprate,AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT); //870 at 8000, 4800 at 44100
bufsizbytes=minbufsizbytes; //
tv.setText("minbufsizebytes "+minbufsizbytes+"\n"); //gets to here
bufsizsamps=bufsizbytes/2;
buffer = new short[bufsizsamps];
fillbuf();
// dumpbuf();
// swapbuf();
try{
at = new AudioTrack(AudioManager.STREAM_MUSIC,samprate,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,bufsizbytes,AudioTrack.MODE_STATIC);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
tv.append("create audiotracksnafu "+e+"\n"); //gets to here
e.printStackTrace();
}
at.setStereoVolume(1.0f,1.0f);
tmp=at.write(buffer, 0, bufsizsamps);
}//oncreate
void playit(){
tv.append("in playit!\n"); //
at.stop();
// at.setPlaybackHeadPosition(0);
at.reloadStaticData();
at.play();
// SystemClock.sleep(1000L);
// at.stop();
}
void fillbuf(){
double omega,t;
double dt=1.0/samprate; //sec per samp
t=0.0;
omega=(float)(2.0*Math.PI*f);
for(int i=0; i < bufsizsamps; i++){
buffer[i]=(short)(32000.0*Math.sin(omega*t));
t+=dt;
}
}
/*
void swapbuf(){
short i,in,out;
byte inh,inl;
for(i=0; i < bufsizsamps; i++){
in=buffer[i];
inh=(byte) (in >>

;
inl=(byte) (in & 0xff);
out=(short) (inl*256+inh);
buffer[i]=out;
}
}
void dumpbuf(){
short i;
for(i=0; i < 256; i++){
tv.append(" "+ buffer[i]);
}
}
*/
//----------lifecycle callbacks----------------
@Override
public void onPause(){
super.onPause();
at.pause();
tv.append("onpause!\n"); //gets to here
}
@Override
public void onResume(){
super.onResume();
tv.append("onresume!\n"); //gets to here
// playit();
}
@Override
public void onStop(){
super.onStop();
at.stop();
tv.append("onstop!\n"); //gets to here
}
// @Override
// public void onDestroy(){
// super.onDestroy();
// }
//------------gesture callbacks--------------------
@Override
public boolean onTouchEvent(MotionEvent e){
if(e.getAction()==MotionEvent.ACTION_DOWN){
tv.append("in ontouch!\n"); //gets to here
playit();
}
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) {
// TODO Auto-generated method stub
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-------------------------------