package com.shine.analogoscilloscope; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.graphics.Color; import android.graphics.Paint; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import android.widget.ZoomControls; public class MainActivity extends Activity { /** Called when the activity is first created. */ private final int MENU_ABOUT = Menu.FIRST; private final int MENU_EXIT = Menu.FIRST+1; private final int MENU_SET= Menu.FIRST+2; private final int DIALOG_ABOUT = 1; private final int DIALOG_SETUP = 2; Button btnStart,btnExit; SurfaceView sfv; ZoomControls zctlX,zctlY; ClsOscilloscope clsOscilloscope=new ClsOscilloscope(); static int frequency = 8000;//分辨率 //static final int frequency = 44100;//分辨率 static final int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; static final int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; static final int xMax = 25;//X轴缩小比例最大值,X轴数据量巨大,容易产生刷新延时 static final int xMin = 1;//X轴缩小比例最小值 static final int yMax = 100;//Y轴缩小比例最大值 static final int yMin = 1;//Y轴缩小比例最小值 private TextView textx; private TextView texty; Button button_xadd; Button button_xcut; Button button_yadd; Button button_ycut; int recBufSize;//录音最小buffer大小 AudioRecord audioRecord; Paint mPaint; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //按键 btnStart = (Button) this.findViewById(R.id.btnStart); btnStart.setOnClickListener(new ClickEvent()); btnExit = (Button) this.findViewById(R.id.btnExit); btnExit.setOnClickListener(new ClickEvent()); //画板和画笔 sfv = (SurfaceView) this.findViewById(R.id.SurfaceView01); sfv.setOnTouchListener(new TouchEvent()); textx = (TextView)this.findViewById(R.id.textX); texty = (TextView)this.findViewById(R.id.textY); button_xadd = (Button)this.findViewById(R.id.buttonx1); button_xcut = (Button)this.findViewById(R.id.buttonx2); button_yadd = (Button)this.findViewById(R.id.buttony1); button_ycut = (Button)this.findViewById(R.id.buttony2); mPaint = new Paint(); mPaint.setColor(Color.GREEN);// 画笔为绿色 mPaint.setStrokeWidth(1);// 设置画笔粗细 //示波器类库 clsOscilloscope.initOscilloscope(xMin, yMax/2, sfv.getHeight()/2); //==================================================================== //为XY轴缩放按钮绑定监听事件 button_xcut.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub if(clsOscilloscope.rateX>xMin) clsOscilloscope.rateX--; textx.setText("X轴增加"+String.valueOf(xMax-clsOscilloscope.rateX+1)+"倍"); }}); button_xadd.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub if(clsOscilloscope.rateX<xMax) clsOscilloscope.rateX++; textx.setText("X轴增加"+String.valueOf(xMax-clsOscilloscope.rateX+1)+"倍"); } }); button_ycut.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub if(clsOscilloscope.rateY>yMin) clsOscilloscope.rateY--; texty.setText("Y轴增加"+String.valueOf(yMax-clsOscilloscope.rateY+1)+"倍"); } }); button_yadd.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub if(clsOscilloscope.rateY<yMax) clsOscilloscope.rateY++; texty.setText("Y轴增加"+String.valueOf(yMax-clsOscilloscope.rateY+1)+"倍"); } }); //================================================================================= } @Override protected void onDestroy() { super.onDestroy(); clsOscilloscope.Stop(); //android.os.Process.killProcess(android.os.Process.myPid()); } /** * 按键事件处理 * @author GV * */ class ClickEvent implements View.OnClickListener { @Override public void onClick(View v) { if (v == btnStart) {//开始 //录音组件 recBufSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding); audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, recBufSize); clsOscilloscope.baseLine=sfv.getHeight()/2; clsOscilloscope.Start(audioRecord,recBufSize,sfv,mPaint); Toast.makeText(getApplicationContext(), "ok!", Toast.LENGTH_SHORT).show(); } else if (v == btnExit) {//停止 clsOscilloscope.Stop(); } } } /** * 触摸屏动态设置波形图基线 * @author GV * */ class TouchEvent implements OnTouchListener{ @Override public boolean onTouch(View v, MotionEvent event) { clsOscilloscope.baseLine=(int)event.getY(); return true; } } //重写对话框服务程序 @Override protected Dialog onCreateDialog (int id) { switch (id) { case DIALOG_ABOUT: return new AlertDialog.Builder(this) .setIcon(R.drawable.about_info) .setTitle("关于") .setMessage(" 模拟语音示波器\n" + " Just do it!\n" + "胖大星!让我们一起去抓水母吧!") .setPositiveButton("确定", null) .create(); case DIALOG_SETUP: return new AlertDialog.Builder(this).setTitle("抽样频率选择") .setIcon(android.R.drawable.ic_dialog_info) .setSingleChoiceItems(new String[] { "采样频率为8000Hz", "采样频率为4100Hz" }, 0, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { if(which==0) { //=================== frequency = 8000; //=================== } else { //=================== frequency = 44100; //=================== } } }) .setPositiveButton("确定", null).show(); default: return null; } } //重写菜单设置服务函数 @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0,MENU_ABOUT,0,"关于") .setIcon(R.drawable.about); menu.add(0,MENU_SET,0,"设置") .setIcon(R.drawable.setup); menu.add(0,MENU_EXIT,0,"退出") .setIcon(R.drawable.exit); return true; } //重写菜单选择响应服务函数 @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case MENU_ABOUT: showDialog(DIALOG_ABOUT); break; case MENU_SET: showDialog(DIALOG_SETUP); break; case MENU_EXIT: finish();//退出程序 break; default: break; } //Toast.makeText(getApplicationContext(), "Frequency:"+frequency+"Hz",Toast.LENGTH_SHORT).show(); return false; } }
最近下载更多
lvjiang123 LV1
2021年5月22日
赵赵赵赵赵赵赵 LV1
2020年6月19日
z214658597 LV1
2019年4月13日
wqs-manson LV1
2019年3月11日
lzyChina LV1
2017年8月4日
jerry_xie_cn LV1
2017年7月20日
yy1069442142 LV1
2017年7月14日
saijirihu1234 LV9
2017年6月28日
SiriusYZZ LV3
2017年5月29日
rengle LV1
2017年5月24日
最近浏览更多
LITIANYU084414 LV11
2023年1月13日
wengzheng007 LV1
2022年11月22日
zhendong LV7
2022年9月25日
张恺祺 LV6
2022年5月21日
萌了个乖乖 LV12
2022年5月20日
GZW012345 LV8
2022年5月15日
dangzhiyuan012 LV12
2022年3月17日
lqf123 LV9
2021年6月14日
lvjiang123 LV1
2021年5月22日
lczd888 LV9
2021年5月8日