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日
            
            
        
    
                