1、请求录制音频权限

<user-permission android:name="android.permission.RECORD_AUDIO"/>

RECORD_AUDIO 权限从6.0后需要进行用户授权,通过ActivityCompat.requestPermissions();

2、创建运行MediaRecorder

2.1 设置音频源setAudioSource(int audio_source) ,多少情况使用MediaRecorder.AudioSource.MIC

2.2 设置输出音频文件格式 setOutputFormat(int output_format)

*(Android 8.0 开始支持MPEG2_TS 格式)

2.3  设置输出文件名 setOutputFile(String filepath)

2.4 设置音频编码器 setAudioEncoder(int audio_encoder)

2.5 通过完成初始化 prepare()

2.6  start()

3 停止释放资源

stop()  release()

4、创建MediaPlayer

MediaPlayer mediaPlayer=new MediaPlayer();
mediaPlayer.setDataSource(recordFile.getPath());
mediaPlayer.prepare();
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
}
});
package com.rexkell.mediaapplication;

import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button; import java.io.File;
import java.io.IOException; /**
* author: rexkell
* explain:MediaRecord 录制音频
*/
public class MediaRecordActivity extends AppCompatActivity {
private boolean isRecording=false;
MediaRecorder mediaRecorder;
MediaPlayer mediaPlayer;
File recordFile;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_mediarecord);
init();
}
public void init(){
mediaRecorder=new MediaRecorder();
//设置音频的来源
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置音频的输出格式
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);
//设置音频文件的编码
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
mediaPlayer=new MediaPlayer();
recordFile=new File(getExternalFilesDir(null).getPath()+"/test.amr"); }
public void record(View v){
isRecording=!isRecording;
String text=isRecording?"暂停":"录制";
((Button)v).setText(text);
if (isRecording){
startRecord();
}else {
stopRecord();
}
}
public void play(View v){ if (mediaPlayer.isPlaying()){
return;
}
//设置数据源
try {
mediaPlayer.setDataSource(recordFile.getPath());
mediaPlayer.prepare();
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
}
});
} catch (IOException e) {
e.printStackTrace();
} }
public void startRecord(){
if (recordFile.exists()){
recordFile.delete();
}
try {
recordFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
} mediaRecorder.setOutputFile(recordFile.getPath());
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
public void stopRecord(){
if (mediaRecorder!=null&&isRecording){
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder=null;
}
}
public void stopPlay(){
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
}
}
}

  

最新文章

  1. SVN部署和使用
  2. LNMP虚拟机开发环境配置--vagrant+virtualbox+ubuntu14.04
  3. python——常用功能之文本处理
  4. 约瑟夫(环)问题(Josephus problem)
  5. python之fabric(二):执行模式(转)
  6. JQuery replace 替换全部
  7. 外卖的撕‘哔’大战 CSU 1559
  8. Servlet转发和重定向的区别
  9. VPS 上ubuntu 里搭建VPN服务器
  10. Linux基础常用命令
  11. call(),apply()方法解析(一)
  12. 数据结构:关键路径,利用DFS遍历每一条关键路径JAVA语言实现
  13. 让自己的开源项目支持CocoaPods
  14. Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array(动态规划.递推)
  15. android TextView加载html 过滤所有标签,保留换行标签
  16. Dynamics 365设置错误通知首选项的方法
  17. CMDB服务器管理系统【s5day92】:服务器管理回顾
  18. jQuery 事件 - ready() 方法
  19. Count the Colors---zoj1610线段树
  20. CentOS 7.0 防火墙操作

热门文章

  1. python爬虫爬小说网站涉及到(js加密,CSS加密)
  2. Java学习 1.2——简述JVM,JRE,JDK的关系
  3. 易优CMS:if的基础用法
  4. JS基础语法---arguments对象伪数组
  5. Dynamics 365 CE Update消息PostOperation阶段Image的尝试
  6. 【实习第一天】odoo开发基础(一)
  7. 网络编程~~~ socket(套字节)
  8. 【转载】Java中的多线程超详细的总结
  9. 如何使用 TRANSPORTABLE = ALWAYS 将PDB移回Non-CDB (Doc ID 2027352.1)
  10. SQL注入:POST注入