博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
笔记18 | MediaRecorder录音
阅读量:5166 次
发布时间:2019-06-13

本文共 3905 字,大约阅读时间需要 13 分钟。

前言

MediaRecorder可以实现录音和录像,使用MediaRecorder录音录像时需要严格遵守API说明中的函数调用先后顺序,否则不能成功执行。

地址

CSDN 地址:http://blog.csdn.net/xiangyong_1521/article/details/50681230官方说明:http://developer.android.com/reference/android/media/MediaRecorder.html

MediaRecorder类的常用方法

  • MediaRecorder() 构造方法

  • getMaxAmplitude() 得到目前为止最大的幅度

  • prepare() 准备录音机

  • release() 释放MediaRecorder对象

  • reset() 重置MediaRecorder对象,使其为空闲状态

  • setAudioEncoder() 设置音频编码

  • setAudioSource() 设置音频源

  • setCamera() 设置摄像机

  • setMaxDuration() 设置最大期限

  • setMaxFileSize() 设置文件的最大尺寸

  • setOnErrorListener() 错误监听

  • setOutputFile() 设置输出文件

  • setOutputFormat() 设置输出文件的格式

  • setPreviewDisplay() 设置预览

  • setVideoEncoder() 设置视频编码

  • setVideoFrameRate() 设置视频帧的频率

  • setVideoSize() 设置视频的宽度和高度(分辨率)

  • setVideoSource() 设置视频源

  • start() 开始录制

  • stop() 停止录制

效果

20171016拓展录制时间:

主要代码

Mainactivity:

package com.example.book_mediarecorder;import java.io.File;import java.sql.Date;import java.text.SimpleDateFormat;import android.app.Activity;import android.media.MediaRecorder;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity {	Boolean isRecording=false;	TextView rTimer;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		final Button button = (Button) findViewById(R.id.bRecourd);		rTimer = (TextView) findViewById(R.id.rTimer);		if (isRecording) {			button.setText("正在录制中...");		}else{			button.setText("开始录制");		}		button.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {				if (!isRecording) {					isRecording=true;					button.setText("正在录制中...");					startRecord();				}else{					isRecording=false;					button.setText("开始录制");					stopRecord();				}			}		});	}	private MediaRecorder mr=null; 	int Count;	//开始录制	private void startRecord() {		if (mr == null) {			File dir = new File(Environment.getExternalStorageDirectory(), "sounds"); //创建音频存放的目录			if (!dir.exists()) {				dir.mkdirs();			}			File soundFile = new File(dir, getCurrentTime()+".amr"); //创建的音频名称			if (!soundFile.exists()) {				try {					soundFile.createNewFile();				} catch (Exception e) {					e.printStackTrace();				}			}			mr = new MediaRecorder();			mr.setAudioSource(MediaRecorder.AudioSource.MIC);//拿到机器的MIC			mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);//设置输出格式			mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);//设置编码格式			mr.setOutputFile(soundFile.getAbsolutePath());			try {				mr.prepare();				mr.start();			} catch (Exception e) {				e.printStackTrace();			}			Count = 0;			handler = new Handler();			runnable = new Runnable() {				@Override				public void run() {					if (Count == 1800) {//限制录制时间1800s						mr.stop();						mr.release();						mr = null;					}					Count ++;					str = showTimeCount((long)Count)+"/30:00";					rTimer.setText(str);					if (handler!=null) {						handler.postDelayed(this, 1000);					}				}			};			runnable.run();		}	}	Handler handler;	Runnable runnable ;	String str;	//停止录制	private void stopRecord() {		if (mr != null) {			mr.stop();			mr.release();			mr = null;		}		str="";		handler=null;		runnable=null;	}	//获取当前时间,以其为名来保存录音  	private String getCurrentTime(){  		SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmss");  		Date date=new Date(System.currentTimeMillis());  		String str=format.format(date);  		return str;  	} 	将时间转为计时格式	String showTimeCount(long time){		String s = null;		if (time <= 59) {			s = "00:";			return time<10 ? s+"0"+String.valueOf(time) : s+String.valueOf(time);		}else{			return (time%60 <10 ? s+"0"+String.valueOf(time) : s+String.valueOf(time))+ ":"+(time/60<10 ? s+"0"+String.valueOf(time) : s+String.valueOf(time));  		}	}}

布局一个Button,一个textView:

    

权限如下:

>

>

>

>

>

END

转载于:https://www.cnblogs.com/xiangevan/p/10751724.html

你可能感兴趣的文章
[Linux]文件浏览
查看>>
64位主机64位oracle下装32位客户端ODAC(NFPACS版)
查看>>
获取国内随机IP的函数
查看>>
今天第一次写博客
查看>>
江城子·己亥年戊辰月丁丑日话凄凉
查看>>
IP V4 和 IP V6 初识
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
『Raid 平面最近点对』
查看>>
【ADO.NET基础-数据加密】第一篇(加密解密篇)
查看>>
C语言基础小结(一)
查看>>
STL中的优先级队列priority_queue
查看>>
UE4 使用UGM制作血条
查看>>
浏览器对属性兼容性支持力度查询网址
查看>>
OO学习总结与体会
查看>>
虚拟机长时间不关造成的问题
查看>>
面试整理:Python基础
查看>>
Python核心编程——多线程threading和队列
查看>>
Program exited with code **** 相关解释
查看>>
植物大战僵尸中文年度版
查看>>