不多说,直接上代码,有具体凝视

MyAudioRecord.java

import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/**
* 这个是利用MediaRecorder类来实现自己的音频录制程序
*
* 为了能够录制音频我们须要RECORD_AUDIO权限
* 为了能够写入SDCard,我们须要WRITE_EXTERNAL_STORAGE权限
* @author Administrator
*
*/
public class MyAudioRecord extends Activity { private TextView stateView; private Button btnStart,btnStop,btnPlay,btnFinish; private MediaRecorder recorder; private MediaPlayer player; private File audioFile; private Uri fileUri; public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_audio_record); stateView = (TextView)this.findViewById(R.id.view_state);
stateView.setText("准备開始");
btnStart = (Button)this.findViewById(R.id.btn_start);
btnStop = (Button)this.findViewById(R.id.btn_stop);
btnPlay = (Button)this.findViewById(R.id.btn_play);
btnFinish = (Button)this.findViewById(R.id.btn_finish); btnStop.setEnabled(false);
btnPlay.setEnabled(false); } public void onClick(View v){
int id = v.getId();
switch(id){
case R.id.btn_start:
//開始录制
//我们须要实例化一个MediaRecorder对象,然后进行对应的设置
recorder = new MediaRecorder();
//指定AudioSource 为MIC(Microphone audio source ),这是最长用的
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//setAudioSource/setVedioSource
//指定OutputFormat,我们选择3gp格式
//其它格式,MPEG-4:这将指定录制的文件为mpeg-4格式
//RAW_AMR:录制原始文件,这仅仅支持音频录制,同一时候要求音频编码为AMR_NB
//THREE_GPP:录制后文件是一个3gp文件,支持音频和视频录制
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//指定Audio编码方式,眼下仅仅有AMR_NB格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//接下来我们须要指定录制后文件的存储路径
File fpath = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/data/files/");
fpath.mkdirs();//创建目录
try {
//创建暂时文件
audioFile = File.createTempFile("recording", ".3gp", fpath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} recorder.setOutputFile(audioFile.getAbsolutePath()); //以下就開始录制了
try {
recorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} recorder.start(); stateView.setText("正在录制");
btnStart.setEnabled(false);
btnPlay.setEnabled(false);
btnStop.setEnabled(true); break;
case R.id.btn_stop:
recorder.stop();
recorder.release(); //然后我们能够将我们的录制文件存储到MediaStore中
ContentValues values = new ContentValues();
values.put(MediaStore.Audio.Media.TITLE, "this is my first record-audio");
values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis());
values.put(MediaStore.Audio.Media.DATA, audioFile.getAbsolutePath());
fileUri = this.getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);
//录制结束后,我们实例化一个MediaPlayer对象,然后准备播放
player = new MediaPlayer();
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override
public void onCompletion(MediaPlayer arg0) {
//更新状态
stateView.setText("准备录制");
btnPlay.setEnabled(true);
btnStart.setEnabled(true);
btnStop.setEnabled(false);
}
}); //准备播放
try {
player.setDataSource(audioFile.getAbsolutePath());
player.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //更新状态
stateView.setText("准备播放");
btnPlay.setEnabled(true);
btnStart.setEnabled(true);
btnStop.setEnabled(false);
break;
case R.id.btn_play:
//播放录音
//注意,我们在录音结束的时候,已经实例化了MediaPlayer,做好了播放的准备
player.start();
//更新状态
stateView.setText("正在播放");
btnStart.setEnabled(false);
btnStop.setEnabled(false);
btnPlay.setEnabled(false); //在播放结束的时候也要更新状态
break;
case R.id.btn_finish:
//完毕录制,返回录制的音频的Uri
Intent intent = new Intent();
intent.setData(fileUri);
this.setResult(RESULT_OK, intent);
this.finish();
break; }
}
}

AndroidManifest.xml

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

Android多媒体-MediaRecorder 录制音视频的更多相关文章

  1. Android 用MediaRecorder录制视频太短崩的问题

    具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩. 错误信息: java.lang.RuntimeException: stop ...

  2. Android音视频之MediaRecorder音视频录制

    前言: 公司产品有很多地方都需要上传音频视频,今天抽空总结一下音频视频的录制.学习的主角是MediaRecorder类. MediaRecorder类介绍: MediaRecorder类是Androi ...

  3. Android多媒体录制--MediaRecorder视频录制

    Android使用MediaRecorder类进行视频的录制. 需要注意,使用MediaRecorder 录音录像 的设置代码步骤一定要按照API指定的顺序来设置,否则报错 步骤为: 1.设置视频源, ...

  4. Android 开发 MediaRecorder视频录制入门

    前言 MediaRecorder是Android SDK提供用于录制音视频,关于音频的录制在我另一篇博客里已经介绍.传送门: https://www.cnblogs.com/guanxinjing/p ...

  5. Android 音视频开发(七): 音视频录制流程总结

    在前面我们学习和使用了AudioRecord.AudioTrack.Camera.MediaExtractor.MediaMuxer API.MediaCodec. 学习和使用了上述的API之后,相信 ...

  6. android音视频点/直播模块开发

      音视频 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白, ...

  7. Android 音视频开发学习思路

    Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) ...

  8. Android音视频点/直播模块开发实践总结-zz

    随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能.那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及 ...

  9. Android开发 音视频开发需要了解的专业术语知识

    前言 在摸索一段时间的音视频开发后,越来越发现这个坑的深度真是特别的深. 除了了解Android自带的音视频处理API以外,还得了解一些视频与音频方面的知识.这篇博客就是主要讲解这方面的专业术语.内容 ...

随机推荐

  1. Codeforces Round #267 (Div. 2) A

    题目: A. George and Accommodation time limit per test 1 second memory limit per test 256 megabytes inp ...

  2. 使用python+flask让你自己api(教程源代码)

    1.背景 ok,这可能是很多朋友和我一样经常使用的各种api,例facebook的.github的.甚至微信api.因此,很多人都想使自己的api.在线教程在这方面它是非常小的,今天,我做了一个平稳, ...

  3. folat i = 0.1; 警告

    今天的用途  float i = 0.1;那么编译器警告实际: #include <iostream> using namespace std; int main() { float k ...

  4. C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】

    STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...

  5. Linux内核分析(三)----初识linux内存管理子系统

    原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...

  6. MYSQL-用户权限的验证过程(转)

    知识点 因为MySQL是使用User和Host两个字段来确定用户身份的,这样就带来一个问题,就是一个客户端到底属于哪个host. 如果一个客户端同时匹配几个Host,对用户的确定将按照下面的优先级来排 ...

  7. Matlab.NET混合编程调用Figure窗体

    原文:[原创]Matlab.NET混合编程调用Figure窗体 1.前言 做Matlab.NET混合编程好几年了,虽然Matlab很多函数忘记得差不多了,但基本的东西还是能熟练使用.特别是在C#调用M ...

  8. Android 定义自己的学习(5)它们的定义Progressbar

    它们的定义View最后的研究,首先在效果图. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE2MzcyNg==/font/5a6L5L2T/f ...

  9. Robot Framework自动化测试(一)---第一个脚本(转)

    最近工具中用Robot Framework框架来做自动化,所以,花时间学习了一下. =======所需环境=================== Python: https://www.python. ...

  10. Android 滑动界面实现---Scroller类别 从源代码和开发文档了解(让你的移动布局)

    在android学习,行动互动是软件的重要组成部分,其中Scroller是提供了拖动效果的类,在网上.比方说一些Launcher实现滑屏都能够通过这个类去实现.. 样例相关博文:Android 仿 窗 ...