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播放也没什么难度,主要就是将数据写入 ...
随机推荐
- 洗牌算法及 random 中 shuffle 方法和 sample 方法浅析
对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章<扫雷与算 ...
- [browser location和history] 简单实现了个路由[转载]
今天看了1下前面写的,好像缺乏交流性,周末再来弄吧 -0- 今天看了browser 的 location 和 history location属性 // //location.hash 性是一个可读可 ...
- Vue中通过Vue.extend动态创建实例
Vue中通过Vue.extend动态创建实例 在Vue中,如果我们想要动态地来控制一个组件的显示和隐藏,比如通过点击按钮显示一个对话框或者弹出一条信息.我们通常会提前写好这个组件,然后通过v-if = ...
- Tensorflow创建会话,启动会话
import tensorflow as tf #定义一个常量 m1=tf.constant([[,]])#这是一个一行两列的数据 print(m1) m2=tf.constant([[],[]]) ...
- Android 亮度调节功能开发思路整理
做 Android 音视频播放器开发的时候,我们基本都会遇到一类需求:音量 & 亮度 调节.其中做亮度调节功能的时候,发现还是有一定复杂度的. Android亮度调节分为两个类,分别是: An ...
- 关于discuz的fap.php 漏洞问题
discuz后台SQL注入漏洞 discuz的/faq.php的$action == 'grouppermission'处理逻辑中,对$gids未进行初始化,黑客可通过构造特殊HTTP请求借助变量覆盖 ...
- Fundebug前端异常监控插件更新至2.0.0,全面支持TypeScript
摘要: 是时候支持TS了! Fundebug前端异常监控服务 Fundebug提供专业的前端异常监控服务,我们的插件可以提供全方位的异常监控,可以帮助开发者第一时间定位各种前端异常,包括但不限于Jav ...
- CSS绘制三角形和箭头,不用再用图片了
前言 还在用图片制作箭头,三角形,那就太lou了.css可以轻松搞定这一切,而且颜色大小想怎么变就怎么变,还不用担心失真等问题. 先来看看这段代码: /**css*/.d1{ width: 0; he ...
- EXSI的使用
新建资源池 创建好的资源池和虚拟机 创建用户 角色就是权限的集合 右键点击添加. 创建完角色回到清单资源池 重点新登录 bios有一项叫来电自启动. 添加网桥
- css3中calc、vw、vh、vmin、vmax 属性的应用及兼容性详解
一. calc()的使用什么是calc()? calc()从字面我们可以把他理解为一个函数function.其实calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,用来指定 ...