`

MediaRecorder录音,MediaPlayer播放

阅读更多
直接看代码
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

/**
 * http://blog.sina.com.cn/s/blog_68494364010116gk.html
 * @author reyo
 *
 */
public class AudioRecordActivty extends Activity{

	private static final String TAG = "AudioRecordActivty";
    private static String mFileName = null;
    private RecordButton mRecordButton = null;
    private PlayButton   mPlayButton = null;
    private MediaRecorder mRecorder = null;
    private MediaPlayer   mPlayer = null;
    
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        LinearLayout layout = new LinearLayout(this);
        mRecordButton = new RecordButton(this);
        layout.addView(mRecordButton,new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                0));
        mPlayButton = new PlayButton(this);
        layout.addView(mPlayButton,new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                0));
        setContentView(layout);
        
        mFileName = Environment.getExternalStorageDirectory().getPath();
        mFileName += "/audiorecordtest.amr";
        Log.i("tag", "mFileName="+mFileName);
        
    }
    
    @Override
    public void onPause() {
        super.onPause();
        stopRecording();
        stopPlaying();
    }
    
    private void onRecord(boolean start) {
        if (start) {
            startRecording();
        } else {
            stopRecording();
        }
    }
   
    private void startRecording() {
    	try {
	        mRecorder = new MediaRecorder();
	        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置麦克风
	        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);// 设置输出文件格式
	        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// 设置编码格式
	        mRecorder.setOutputFile(mFileName);// 使用绝对路径进行保存文件
            mRecorder.prepare();
            mRecorder.start();
        } catch (IOException e) {
            Log.e(TAG, "prepare() failed");
        }
    }
    private void stopRecording() {
    	if(mRecorder!=null){
	        mRecorder.stop();
	        mRecorder.release();
	        mRecorder = null;
    	}
    }
    
    private void startPlaying() {
        try {
        	mPlayer = new MediaPlayer();
            mPlayer.setDataSource(mFileName);//获取绝对路径来播放音频
            mPlayer.prepare();
            mPlayer.start();
            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
				
				@Override
				public void onCompletion(MediaPlayer mp) {
					// TODO Auto-generated method stub
					stopPlaying();
					mPlayButton.setEnabled(true);
				}
			});
            mPlayButton.setEnabled(false);
        } catch (IOException e) {
            Log.e(TAG, "prepare() failed");
        }
    }
    private void stopPlaying() {
    	if(mPlayer!=null){
                mPlayer.stop();
	        mPlayer.release();
	        mPlayer = null;
    	}
    }
    
    class RecordButton extends Button {
        boolean mStartRecording = true;
        public RecordButton(Context ctx) {
            super(ctx);
            setText("Start recording");
            setOnClickListener(clicker);
        }
        OnClickListener clicker = new OnClickListener() {
            public void onClick(View v) {
                onRecord(mStartRecording);
                if (mStartRecording) {
                    setText("Stop recording");
                } else {
                    setText("Start recording");
                }
                mStartRecording = !mStartRecording;
            }
        };
       
    }
    class PlayButton extends Button {
        public PlayButton(Context ctx) {
            super(ctx);
            setText("Start playing");
            setOnClickListener(clicker);
        }
        OnClickListener clicker = new OnClickListener() {
            public void onClick(View v) {
            	startPlaying();
            }
        };
        
    }
    
	class Fileter implements FilenameFilter {
		public boolean accept(File dir, String filename) {
			// TODO Auto-generated method stub
			return filename.equals(".amr");
		}
	}
    
	
	/**
     * 上传文件
     * @param urlStr 服务器地址
     * @param file 需要上传的文件
     * @return 上传是否成功
     */
    private boolean uploadFile(String urlStr,File file){
    	try {
    		String end = "\r\n";
    	    String hyphens = "--";
    	    String boundary = "*****";
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
			/* 允许使用输入流,输出流,不允许使用缓存*/
			conn.setDoInput(true);
			conn.setDoOutput(true);
			conn.setUseCaches(false);
			/* 请求方式*/
			conn.setRequestMethod("POST");
			conn.setRequestProperty("Charset", "UTF-8");
			conn.setRequestProperty("Connection", "Keep-Alive");
			conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
			
			/* 当文件不为空,把文件包装并且上传*/
			Log.e(TAG, file.toString());
			if(file != null){
				DataOutputStream ds = new DataOutputStream(conn.getOutputStream());
				/* name里面的值为服务器端需要key   只有这个key 才可以得到对应的文件
				 * filename是文件的名字,包含后缀名的   比如:abc.png*/
				ds.writeBytes(hyphens + boundary + end);
				ds.writeBytes("Content-Disposition: form-data; " + "name=\"file1\";filename=\"" + 
						file.getName() +"\"" + end);
				ds.writeBytes(end);
				
				InputStream input = new FileInputStream(file);
				int size = 1024;
				byte[] buffer = new byte[size];
				int length = -1;
				/* 从文件读取数据至缓冲区*/
				while((length = input.read(buffer)) != -1){
					ds.write(buffer, 0, length);
				}
				input.close();
				ds.writeBytes(end);
				ds.writeBytes(hyphens + boundary + hyphens + end);
				ds.flush();
				
				/* 获取响应码*/
//				Log.e(TAG, "ResponseCode==="+conn.getResponseCode());
				if(conn.getResponseCode() == 200){
					return true;
				}
			}
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return false;
    }
    
}

分享到:
评论

相关推荐

    基于springboot个人公务员考试管理系统源码数据库文档.zip

    基于springboot个人公务员考试管理系统源码数据库文档.zip

    bimdata_api_client-4.2.1-py3-none-any.whl

    bimdata_api_client-4.2.1-py3-none-any.whl

    numpy-1.20.2-cp39-cp39-linux_armv7l.whl

    numpy-1.20.2-cp39-cp39-linux_armv7l.whl

    matplotlib-3.3.2-cp39-cp39-linux_armv7l.whl

    matplotlib-3.3.2-cp39-cp39-linux_armv7l.whl

    bimdata_api_client-4.0.0-py3-none-any.whl

    bimdata_api_client-4.0.0-py3-none-any.whl

    ta_lib-0.5.1-cp312-cp312-win32.whl

    ta_lib-0.5.1-cp312-cp312-win32.whl

    基于springboot的非学勿扰学习交流平台源码数据库文档.zip

    基于springboot的非学勿扰学习交流平台源码数据库文档.zip

    基于springboot云平台的信息安全攻防实训平台源码数据库文档.zip

    基于springboot云平台的信息安全攻防实训平台源码数据库文档.zip

    pillow-10.4.0-cp311-cp311-linux_armv7l.whl

    pillow-10.4.0-cp311-cp311-linux_armv7l.whl

    springboot229基于Spring Boot的企业员工薪酬关系系统的设计.zip

    论文描述:该论文研究了某一特定领域的问题,并提出了新的解决方案。论文首先对问题进行了详细的分析和理解,并对已有的研究成果进行了综述。然后,论文提出了一种全新的解决方案,包括算法、模型或方法。在整个研究过程中,论文使用了合适的实验设计和数据集,并进行了充分的实验验证。最后,论文对解决方案的性能进行了全面的评估和分析,并提出了进一步的研究方向。 源码内容描述:该源码实现了论文中提出的新的解决方案。源码中包含了算法、模型或方法的具体实现代码,以及相关的数据预处理、实验设计和性能评估代码。源码中还包括了合适的注释和文档,以方便其他研究者理解和使用。源码的实现应该具有可读性、可维护性和高效性,并能够复现论文中的实验结果。此外,源码还应该尽可能具有通用性,以便在其他类似问题上进行进一步的应用和扩展。

    基于springboot+web的学生作业管理系统源码数据库文档.zip

    基于springboot+web的学生作业管理系统源码数据库文档.zip

    springboot244基于SpringBoot和VUE技术的智慧生活商城系统设计与实现.zip

    论文描述:该论文研究了某一特定领域的问题,并提出了新的解决方案。论文首先对问题进行了详细的分析和理解,并对已有的研究成果进行了综述。然后,论文提出了一种全新的解决方案,包括算法、模型或方法。在整个研究过程中,论文使用了合适的实验设计和数据集,并进行了充分的实验验证。最后,论文对解决方案的性能进行了全面的评估和分析,并提出了进一步的研究方向。 源码内容描述:该源码实现了论文中提出的新的解决方案。源码中包含了算法、模型或方法的具体实现代码,以及相关的数据预处理、实验设计和性能评估代码。源码中还包括了合适的注释和文档,以方便其他研究者理解和使用。源码的实现应该具有可读性、可维护性和高效性,并能够复现论文中的实验结果。此外,源码还应该尽可能具有通用性,以便在其他类似问题上进行进一步的应用和扩展。

    基于springboot网上书店源码数据库文档.zip

    基于springboot网上书店源码数据库文档.zip

    numpy-2.1.3-cp311-cp311-linux_armv7l.whl

    numpy-2.1.3-cp311-cp311-linux_armv7l.whl

    基于springboot的校园消费点评系统源码数据库文档.zip

    基于springboot的校园消费点评系统源码数据库文档.zip

    ta_lib-0.5.1-cp37-cp37m-win32.whl

    ta_lib-0.5.1-cp37-cp37m-win32.whl

    java高校学生信息管理系统源码数据库 MySQL源码类型 WebForm

    Java高校学生信息管理系统源码 一、源码介绍 高校学生信息管理系统设计主要应用JAVA语言编程和mysql数据库连接等相关知识,需要熟练掌握Struts2、Spring、Hibernate基础 二、主要功能 高校学生信息管理系统设计主要应用JAVA语言编程和mysql数据库连接等相关知识,需要熟练掌握Struts2、Spring、Hibernate基础,将所 学知识在生活中灵活运用,高校学生信息管理系统的主要设计功能如下: (1)学生信息管理模块:包括所有学生信息的查询(用分页列表显示)、查看某个学生的详细信息、删除某学生信息、修改某学生信息以及学生信息的录入等子功能 (2)学生成绩管理模块:包括成绩信息录入、学生成绩查询、查看某个学生的成绩表以及删除学生

    opencv_python-4.4.0.42-cp39-cp39-linux_armv7l.whl

    opencv_python-4.4.0.42-cp39-cp39-linux_armv7l.whl

    基于springboot扶贫助农系统源码数据库文档.zip

    基于springboot扶贫助农系统源码数据库文档.zip

    springboot235基于SpringBoot的房屋交易平台的设计与实现.zip

    论文描述:该论文研究了某一特定领域的问题,并提出了新的解决方案。论文首先对问题进行了详细的分析和理解,并对已有的研究成果进行了综述。然后,论文提出了一种全新的解决方案,包括算法、模型或方法。在整个研究过程中,论文使用了合适的实验设计和数据集,并进行了充分的实验验证。最后,论文对解决方案的性能进行了全面的评估和分析,并提出了进一步的研究方向。 源码内容描述:该源码实现了论文中提出的新的解决方案。源码中包含了算法、模型或方法的具体实现代码,以及相关的数据预处理、实验设计和性能评估代码。源码中还包括了合适的注释和文档,以方便其他研究者理解和使用。源码的实现应该具有可读性、可维护性和高效性,并能够复现论文中的实验结果。此外,源码还应该尽可能具有通用性,以便在其他类似问题上进行进一步的应用和扩展。

Global site tag (gtag.js) - Google Analytics