Android MediaRecorder录制播放音频
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;
}
}
}
Android MediaRecorder录制播放音频的更多相关文章
- Android MediaRecorder录制音频
今天介绍一下在Android中怎么录制音频,在Android中使用MediaRecorder来录制音频,步骤: 1.创建MediaRecorder对象. 2.调用MediaRecorder对象的set ...
- Android OpenSL ES 开发:Android OpenSL 录制 PCM 音频数据
一.实现说明 OpenSL ES的录音要比播放简单一些,在创建好引擎后,再创建好录音接口基本就可以录音了.在这里我们做的是流式录音,所以需要用至少2个buffer来缓存录制好的PCM数据,这里我们可以 ...
- Android 中MediaPlayer播放音频
1.播放/res/raw/目录下的音频资源 public class MainActivity extends Activity { MediaPlayer mediaPlayer; int posi ...
- Android使用的开发MediaRecorder录制声音
至 Android 录制声音的应用,Android提供 MediaRecorder 类别.大约MediaRecorder可以参考一个特定的解释<Android开发之MediaRecorder类具 ...
- Android多媒体-MediaRecorder 录制音视频
不多说,直接上代码,有具体凝视 MyAudioRecord.java import java.io.File; import java.io.IOException; import android.a ...
- AudioRecord 录制播放PCM音频
AudioRecord 与 MediaRecorder 区别 AudioRecord 基于字节流录制,输出的是pcm数据,未进行压缩,直接保存的pcm文件不能被播放器识别播放. 可以对音频文件进行实时 ...
- 使用MediaRecorder录制音频
手机一般都提供了麦克风硬件,而Android系统就可以利用该硬件来录制音频了. 为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制 ...
- Android使用的开发MediaRecorder录制视频
MediaRecorder除了使用录制音频.还可用于录制视频.关于MediaRecorder的具体解释大家能够參考<Android开发之MediaRecorder类具体解释>.使用Medi ...
- Android音视频之AudioTrack播放音频(二)
前一篇讲了如何录制wav音频文件,本篇就来讲讲如何播放wav文件,这里就是使用AudioTrack来播放音频,确切的说是播放pcm格式数据,使用AudioTrack播放也没什么难度,主要就是将数据写入 ...
随机推荐
- 松软科技web课堂:字符串方法和属性
字符串方法帮助您处理字符串. 字符串方法和属性 原始值,比如“Bill Gates”,无法拥有属性和方法(因为它们不是对象). 但是通过 JavaScript,方法和属性也可用于原始值,因为在执行方法 ...
- ES6-字符串模板
es6字符串模板 // es5 let ananiah = "大诶呀"; let blog = "我要忘了你的样子"+ ananiah; console.log ...
- Cesium专栏-样条插值(平滑路径、飞行动画,源码下载)
Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...
- 简单快速上手Jackson使用
1简介 Jackson具有比较高的序列化和反序列化效率,据测试,无论是哪种形式的转换,Jackson > Gson > Json-lib,而且Jackson的处理能力甚至高出Json-li ...
- iOS常用算法之单链表查找倒数第n个节点(图解)
拿到题目, 首先要先了解链表数据结构, 如下图: 常规思路: 利用数组, 遍历整个单链表, 将每个节点装入数组中, 最终拿到数组根据索引(数组长度-1-n)就得到了倒数第n个元素, 这里要注意从数组中 ...
- How to restore and recover a database from an RMAN backup. (Doc ID 881395.1)
APPLIES TO: Oracle Database - Enterprise Edition - Version 10.1.0.2 to 11.2.0.2 [Release 10.1 to 11. ...
- qtdomdocument找不到
- Statements、PreparedStatement及CallableStatement(三)
当获得了与数据库的连接后,就可以与数据库进行交互了.JDBC Statement,CallableStatement和PreparedStatement接口定义了可用于发送SQL或PL/SQL命令,并 ...
- BZOJ2007/LG2046 「NOI2010」海拔 平面图最小割转对偶图最短路
问题描述 BZOJ2007 LG2046 题解 发现左上角海拔为 \(0\) ,右上角海拔为 \(1\) . 上坡要付出代价,下坡没有收益,所以有坡度的路越少越好. 所以海拔为 \(1\) 的点,和海 ...
- 融云技术分享:解密融云IM产品的聊天消息ID生成策略
本文来自融云技术团队原创分享,原文发布于“融云全球互联网通信云”公众号,原题<如何实现分布式场景下唯一 ID 生成?>,即时通讯网收录时有部分改动. 1.引言 对于IM应用来说,消息ID( ...