zoukankan      html  css  js  c++  java
  • Android录音应用

    首先是xml布局文件:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <Button
            android:id="@+id/btn_talk"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:enabled="false"
            android:text="TALK"
            android:textSize="30dp"
            android:textStyle="bold" />
    
    </LinearLayout>
    

    MainActivity中定义按钮的点击监听器,按下按钮时开始录音,松开按钮时停止录音,类似于微信的操作方法。

    	// 获得控件
    	public void get_con(){
    		
    		btn_talk = (Button)findViewById(R.id.btn_talk);
    		
    		btn_talk.setOnTouchListener(new OnTouchListener(){
    
    			@Override
    			public boolean onTouch(View v, MotionEvent e) {
    
    				if (e.getAction() == MotionEvent.ACTION_DOWN){
    					// 开始录音
    					start_record();
    				}
    				else if (e.getAction() == MotionEvent.ACTION_UP){
    					// 停止录音
    					stop_record();
    				}
    				
    				return false;
    				
    			}
    			
    		});
    		
    	}
    

    开始录音的方法,使用了android.media.MediaRecorder录音。首先判断SD卡是否存在,如果存在根据当前时间给创建一个录音文件,保存到预定的目录中,用MediaRecorder类开始录音。

    	// 开始录音
    	public void start_record(){
    		
    		if (!Environment.getExternalStorageState().equals(
    				android.os.Environment.MEDIA_MOUNTED)){			
    			show_status("SD卡不存在,请插入SD卡!");			
    		}
    		else{
    			try
    			{
    				// 获取当前时间
    				cur_date = new Date(System.currentTimeMillis());
    				str_file = formatter.format(cur_date); 
    				// 创建保存录音的音频文件
    				send_sound_file = new File(Environment
    					.getExternalStorageDirectory()
    					.getCanonicalFile() + "/talk/send");
    				// 如果目录不存在
    				if (!send_sound_file.exists()){
    					send_sound_file.mkdirs();
    				}
    				send_sound_file = new File(Environment
    						.getExternalStorageDirectory()
    						.getCanonicalFile() + "/talk/send/" + str_file + ".amr");
    				recorder = new MediaRecorder();
    				// 设置录音的声音来源
    				recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    				// 设置录制的声音的输出格式(必须在设置声音编码格式之前设置)
    				recorder.setOutputFormat(MediaRecorder
    					.OutputFormat.THREE_GPP);
    				// 设置声音编码的格式
    				recorder.setAudioEncoder(MediaRecorder
    					.AudioEncoder.AMR_NB);
    				recorder.setOutputFile(send_sound_file.getAbsolutePath());
    				recorder.prepare();
    				// 开始录音
    				recorder.start();
    			}
    			catch (Exception e)
    			{
    				show_status(e.toString());
    			}
    		}
    		
    	}
    

    停止录音的方法,相对简单。

    	// 停止录音
    	public void stop_record(){
    		
    		if (send_sound_file != null && send_sound_file.exists())
    		{
    			ses_id = ses_id + 1;
    			// 停止录音
    			recorder.stop();
    			// 释放资源
    			recorder.release();
    			recorder = null;
    		}
    		super.onDestroy();
    		
    	}
    

    经过实验,录制的3gp文件可以正常播放。

  • 相关阅读:
    typeof用法
    图片上传显示图片
    用Express 创建项目
    Express中使用session
    生成一个node项目
    async同步异步
    async异步流程控制
    nodejs并行无关联
    nodejs串行有关联
    nodejs串行无关联
  • 原文地址:https://www.cnblogs.com/mstk/p/3451560.html
Copyright © 2011-2022 走看看