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

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. 跑openstack命令错误【You must provide a username via either -...】

    openstack设置环境,openstack该服务已经启动.当运行openstack当一个命令,如nova service list例如,下面的错误信息 You must provide a use ...

  2. [SignalR]在非Hub继承类中使用脚本方法

    原文:[SignalR]在非Hub继承类中使用脚本方法 新建一个普通类OutHub,里面包含一个脚本方法OutHubTest. 因为大家知道,若能让脚本调用到的话,必须继承Hub,那怎么实现了?通过G ...

  3. 如何解决卸载McAfee时出现“处于托管模式时无法删除”问题(转)

    问题现象: 这几天在为客户终端换装杀毒软件时出现这么一个问题:在控制面板的添加或删除程序里面将“McAfee VirusScan Enterprise和 McAfee AntiSpyware Ente ...

  4. mysql压力测试

    1.采用 mysqlslap  压力测试 mysqlslap  --defaults-file=/etc/my.cnf --concurrency=200 --iterations=1 --numbe ...

  5. 在Mac OS上配置Android开发环境

    1)安装配置NDK 1.1 下载NDK并解压缩 下载路径 https://developer.android.com/tools/sdk/ndk/index.html 在terminal运行: chm ...

  6. GMSK调制仿真

    GMSK 调制的的原理非常简单. 就是MSK调制前进行Gauss滤波. 在实现中有这样的方法,首先产生高斯系数,对称的上升陂和下降陂系数.输入一个符号,进行上采样,经过高斯滤波器,滤波器的输出做有符号 ...

  7. 安装程序添加iis的方法经验分享

    原文:安装程序添加iis的方法经验分享 网上有一些这样的方法,但我这里主要做一些对比和扩充 网上这方面的文章的岁数比较大,server 08R2和win7出来后,整理这方面的资料的文章没找到,所以这里 ...

  8. linux下面的中断处理软件中断tasklet机制

    參考: <Linux内核设计与实现> http://blog.csdn.net/fontlose/article/details/8279113 http://blog.chinaunix ...

  9. ElasticSearch实战

    ElasticSearch实战-入门 1.概述 今天接着<ElasticSearch实战-日志监控平台>一文来给大家分享后续的学习,在<ElasticSearch实战-日志监控平台& ...

  10. 转让lua性能executeGlobalFunction

    没有其他的,搞搞cocos2dx的lua文字,话lua这件事情在几年前学过一段时间.还曾对自己c++介面,我已经做了一些小东西.只是时间的流逝,模糊记忆. 拿起点功夫和成本.下面是我的一些经验. co ...