`
1140566087
  • 浏览: 560277 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18572
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:314547
Group-logo
J2ME 基础学习课程集
浏览量:18796
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17600
社区版块
存档分类
最新评论

Android 之 MeidaRedoreder实现音频录制

阅读更多
调用系统自带的程序进行音频的录制:
package com.example.media_record;

import android.app.Activity;

import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/* 使用自带的音频录制程序
 * 利用MediaRecorder 类实现自己的音频录制程序,也可以录制视频;
 * 创建实例后,调用:
 * 			1、setAudioSource  初始化
 * 			2、setOuputFormat	音频格式
 * 			3、setAudioEncoder 初始化;
 * 			4、setOutputFile() 指定存放录制内容的文件;
 * 
 * */
public class MainActivity extends Activity {

	private Button system_record,custom_media,custom_audio;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		/* 获取组件对象,并且设置事件监听 */
		system_record = (Button) findViewById(R.id.system_mediaRecord);
		custom_media = (Button) findViewById(R.id.custom_mediaRecord);
		custom_audio = (Button) findViewById(R.id.custom_audioRecord);
		
		/* 设置事件监听 */
		system_record.setOnClickListener(listener);
		custom_audio.setOnClickListener(listener);
		custom_media.setOnClickListener(listener);
		
	}

	/* 覆盖该方法,接收数据 *//*  这里获取录制到的音频的Uri, 可以进行播放等操作 */
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		
		if(requestCode == RESULT_OK){
			Uri audioPath = data.getData();
			MediaPlayer mediaPlayer = MediaPlayer.create(this, audioPath);
			mediaPlayer.start();
			Toast.makeText(MainActivity.this, audioPath.toString(), 1000).show();
		}
	}
		
	/* 设置按钮事件监听器 */
	OnClickListener listener = new OnClickListener() {
		
		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch(v.getId()){
			case R.id.system_mediaRecord:
				/* 调用Android自带的音频录制程序 */
				Intent intent1= new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
				startActivityForResult(intent1, 0);
				
				break;
			case R.id.custom_mediaRecord:
				
				/* 通过MediaRecorder 类实现自己的音频录制程序 */
				Intent intent2 = new Intent();
				intent2.setClass(MainActivity.this,MyMediarRecorder.class);
				startActivityForResult(intent2, 1);
				
				break;
			case R.id.custom_audioRecord:
				
				/* 通过AudioRecord类实现自己的音频录制程序 */
				Intent intent3 = new Intent();
				intent3.setClass(MainActivity.this, MyAudioRecord.class);
				startActivityForResult(intent3, 2);
				break;
			}
		}
	};
	


}



使用MediaRecoreder实现音频录制:

package com.example.media_record;
import java.io.File;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
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.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

/* 启动自定义的音频录制程序来完成录制的工作
 * 
 *  权限: 为了可以录制音频需要:RECORD_AUDIO权限
 *  权限:为了可以写入SDCard,需要:WRITE_EXTERNAL_STORAGE权限;
 *  
 *  */
public class MyMediarRecorder extends Activity {

	private TextView stateView;
	private Button start,stop,play,finish;
	private MediaRecorder recorder;
	private File audioFile;
	private Uri fileUri;
	private MediaPlayer mediaPlayer;
	
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.media_recorder_layout);

		/* 获取组件对象 */
		stateView = (TextView) findViewById(R.id.stateView);
		start = (Button) findViewById(R.id.start);
		stop = (Button) findViewById(R.id.stop);
		play = (Button) findViewById(R.id.play);
		finish = (Button) findViewById(R.id.finish);
		
		start.setOnClickListener(listener);
		stop.setOnClickListener(listener);
		play.setOnClickListener(listener);
		finish.setOnClickListener(listener);

		stop.setEnabled(false);
		play.setEnabled(false);

	}

	/* 事件:处理用户的动作  */
	OnClickListener listener = new OnClickListener() {

		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch (v.getId()) {
			case R.id.start:

				/* 开始录制 *//* 需要一个MediaRecorder对象 */
				recorder = new MediaRecorder();

				/* 指定MIC(Microphone audio source) */
				recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

				/* 指定音频文件保存的格式 */
				/* 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(Exception ex){
					Toast.makeText(MyMediarRecorder.this, "临时文件创建失败", 1000).show();
				}

				/* 设置文件的存储位置 */
				recorder.setOutputFile(audioFile.getAbsolutePath());

				/* 开始录制 */
				try{
					/* 准备 */
					recorder.prepare();
				}catch(Exception ex){
					Toast.makeText(MyMediarRecorder.this, "录音失败", 1000).show();
				}

				/* 开始 */
				recorder.start();
				stateView.setText("正在录制...");
				start.setEnabled(false);
				play.setEnabled(false);
				stop.setEnabled(true);

				break;

				/*********************************************************/	
			case R.id.stop:

				/* 停止录制 */
				recorder.stop();

				/* 释放资源 */
				recorder.release();

				/* 然后将录制的文件存储在MediaStore中 ,实现数据共享*/
				ContentValues values = new  ContentValues();
				values.put(MediaStore.Audio.Media.TITLE, "this is my first recored_audio");
				values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis());
				values.put(MediaStore.Audio.Media.DATA, audioFile.getAbsolutePath());

				/* 获取插入数据的Uri */
				fileUri = getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);

				/* 录制结束后 ,实例化一个MediaPlayer对象,播放*/
				mediaPlayer = new MediaPlayer();
				mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
					public void onCompletion(MediaPlayer mp) {

						/* 更新状态 */
						stateView.setText("准备录制...");
						play.setEnabled(true);
						start.setEnabled(true);
						stop.setEnabled(false);
					}
				});

				/* 准备播放 */
				try{
					mediaPlayer.setDataSource(audioFile.getAbsolutePath());
					mediaPlayer.prepare();
					
				}catch(Exception ex){
					
				}
				
				/* 更新状态 */
				stateView.setText("准备播放");
				play.setEnabled(true);
				start.setEnabled(true);
				stop.setEnabled(false);

				break;

			case R.id.play:
				
				/* 播放录音 *//* 在录音结束的时候,已经实例化了MediaPlayer , 做好了播放的准备 */
				mediaPlayer.start();
				
				/* 更新状态 */
				stateView.setText("正在播放");
				start.setEnabled(false);
				stop.setEnabled(false);
				play.setEnabled(false);
				
				
				break;

			case R.id.finish:
				
				/* 完成录制,返回录制的音频的Uri */
				Intent intent = new Intent();
				intent.setData(fileUri);
				this.setResult(RESULT_OK,intent);
				this.finish();
				
				break;
			default:
				break;
			}

		}

		private void finish() {
			// TODO Auto-generated method stub
			
		}

		private void setResult(int resultOk, Intent intent) {
			// TODO Auto-generated method stub
			
		}
	};

}



分享到:
评论

相关推荐

    android 音频录制

    在Android平台上进行音频录制涉及到许多核心技术和组件,包括MediaRecorder、AudioRecord以及音频编码格式等。下面将详细探讨这些知识点。 一、MediaRecorder类 MediaRecorder是Android系统提供用于捕捉多媒体数据...

    Android音频录制与播放

    Android Media Framework提供了录音机(Recorder)和媒体播放器(MediaPlayer)类,用于实现音频的录制和播放。在文件录制与播放方面,我们可以使用AudioRecord类来捕获音频数据,然后将其保存到本地文件,例如MP3或...

    android 录制.wav格式音频文件

    在Android平台上,录制音频文件是一项常见的任务,特别是对于开发音乐应用或者需要语音交互的应用来说。本教程将聚焦于如何在Android中录制`.wav`格式的音频文件,这是一种无损且广泛应用的音频格式。我们将主要围绕...

    Android音频录制

    本文将深入探讨如何使用纯原生的Android SDK来实现一个支持开始、暂停和继续录制功能的音频录制器,不依赖任何第三方库。 首先,我们要了解Android中的`MediaRecorder`类,它是Android SDK提供的一个核心组件,专门...

    android 音频录制、播放功能源码下载

    本文将深入探讨如何利用Android提供的API接口MediaRecord和AudioRecorder实现音频的录制与播放,并通过源码分析,帮助开发者更好地理解和运用这些功能。 首先,我们来看MediaRecord类。MediaRecord是Android系统...

    Android 音频录制例子

    本文将深入探讨如何在Android中实现音频录制,主要基于提供的"AudioRecordDemo"示例。 首先,我们要理解Android的音频框架。Android音频系统包括AudioRecord类,它是用于低级音频数据录制的API。它允许应用程序直接...

    实现屏幕的录制功能

    在Android平台上,虽然原生系统并未提供直接的屏幕录制功能,但开发者可以通过一系列技术手段来实现这一需求。本文将深入探讨如何使用代码实现Android屏幕录制功能。 首先,我们需要理解Android的多媒体框架,尤其...

    Android利用AudioRecord类实现音频录制程序

    Android音频录制程序是Android开发中的一项重要功能,通过使用AudioRecord类可以实现音频录制程序。下面是Android音频录制程序开发的详细介绍: 一、AudioRecord类简介 AudioRecord类是Android中用于音频录制的类...

    android音频录制

    而Android系统的多媒体框架也为开发者提供了MediaRecorder类来实现视频录制功能。在使用MediaRecorder时我们要注意以下几点: 第一:无法使用模拟器进行测试,在使用MediaRecorder进行音视频录制时,需要用真机进行...

    Android Camera2 Demo - 实现相机预览、拍照、录制视频功能

    因为工作中要使用 Android Camera2 API 来实现相机功能,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,这个项目就是我研究的成果。 其中包括一个自己写的Camera2的Demo...

    Android音频录制和播放 支持原生系统调用和自定义页面播放

    本文将深入探讨如何在Android系统上实现原生的音频录制和播放,并支持自定义页面播放,特别关注Android 6.0及以上版本的权限管理。 一、音频录制 1. **权限管理**:在Android 6.0(API级别23)及以后的版本,用户...

    vlc-android实现截图,录制视频Dome程序

    在这个“vlc-android实现截图,录制视频Dome程序”中,我们重点探讨如何利用VLC库在Android应用中实现视频播放、截图以及录制功能。 **一、VLC的Android集成** 在Android项目中集成VLC,你需要将提供的源码解压缩并...

    Qt Android 读写文件权限与录制音频权限询问Demo

    在Android平台上,开发基于Qt的应用程序时,由于Android 6.0(API级别23)引入了运行时权限管理,因此对于涉及敏感操作如读写文件和录制音频的功能,需要在运行时请求用户授权。本Demo是针对这些权限管理的一个实例...

    android-录制aac文件完整版

    本教程将详细介绍如何使用Android SDK来录制AAC格式的音频文件,提供一个完整的实现案例。AAC(Advanced Audio Coding)是一种高效的音频编码标准,它能提供高质量的音频体验,同时占用较少的存储空间。 1. **AAC...

    音频录制和播放示例

    AudioRecord是Android提供的一个API,用于从设备麦克风录制音频数据。它允许开发者设置录音参数,如采样率、位深度和通道数,以满足不同的音频质量需求。在这个示例中,可能创建了一个AudioRecord实例,并设置了合适...

    Android音频录制,以.wav格式结尾,最接近原始声音的音频APP

    简介:一款录音的APP,默认把媒体声音设置为60%,动态获取权限,Android10以及10以下,都 是手动同意单个权限,Android11是弹出一个超级权限,手动选中软件,并赋予权限。 主要内容是:输入音频名字,点击开始录音...

    Android使用AudioRecord、MediaRecorder录制音频

    本文将深入探讨如何使用`AudioRecord`和`MediaRecorder`这两个核心API来实现音频录制,特别是针对PCM和AAC这两种编码格式。 首先,我们要理解PCM( Pulse Code Modulation)和AAC(Advanced Audio Coding)的基本...

    android中录制播放音频

    1. **录制音频** - **初始化MediaRecorder**: 首先,创建一个MediaRecorder实例,并设置其音频源(如AudioSource.MIC),输出格式(如OUTPUT_FORMAT_AAC_ADTS),音频编码(如ENCODING_PCM_16BIT)以及输出文件路径...

    Android音频实时传输与播放-客户端_语音播放Android_android_

    综上所述,实现Android音频实时传输与播放涉及多个技术层面,包括音频录制、编码/解码、网络传输、播放控制以及性能优化。掌握这些知识点对于开发高质量的语音通信应用至关重要。通过研究提供的源代码,开发者可以更...

    基于Java语言的Android音频录制AudioRecordDemo设计源码

    该项目是一个基于Java语言的Android音频录制应用——AudioRecordDemo的设计源码,包含46个文件,其中包括14个XML布局文件、9个Java源代码文件、3个Gradle构建脚本文件、...该应用旨在实现Android平台上的音频录制功能。

Global site tag (gtag.js) - Google Analytics