`

MediaRecorder录音,MediaPlayer播放

阅读更多
直接看代码
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

/**
 * http://blog.sina.com.cn/s/blog_68494364010116gk.html
 * @author reyo
 *
 */
public class AudioRecordActivty extends Activity{

	private static final String TAG = "AudioRecordActivty";
    private static String mFileName = null;
    private RecordButton mRecordButton = null;
    private PlayButton   mPlayButton = null;
    private MediaRecorder mRecorder = null;
    private MediaPlayer   mPlayer = null;
    
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        LinearLayout layout = new LinearLayout(this);
        mRecordButton = new RecordButton(this);
        layout.addView(mRecordButton,new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                0));
        mPlayButton = new PlayButton(this);
        layout.addView(mPlayButton,new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                0));
        setContentView(layout);
        
        mFileName = Environment.getExternalStorageDirectory().getPath();
        mFileName += "/audiorecordtest.amr";
        Log.i("tag", "mFileName="+mFileName);
        
    }
    
    @Override
    public void onPause() {
        super.onPause();
        stopRecording();
        stopPlaying();
    }
    
    private void onRecord(boolean start) {
        if (start) {
            startRecording();
        } else {
            stopRecording();
        }
    }
   
    private void startRecording() {
    	try {
	        mRecorder = new MediaRecorder();
	        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置麦克风
	        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);// 设置输出文件格式
	        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// 设置编码格式
	        mRecorder.setOutputFile(mFileName);// 使用绝对路径进行保存文件
            mRecorder.prepare();
            mRecorder.start();
        } catch (IOException e) {
            Log.e(TAG, "prepare() failed");
        }
    }
    private void stopRecording() {
    	if(mRecorder!=null){
	        mRecorder.stop();
	        mRecorder.release();
	        mRecorder = null;
    	}
    }
    
    private void startPlaying() {
        try {
        	mPlayer = new MediaPlayer();
            mPlayer.setDataSource(mFileName);//获取绝对路径来播放音频
            mPlayer.prepare();
            mPlayer.start();
            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
				
				@Override
				public void onCompletion(MediaPlayer mp) {
					// TODO Auto-generated method stub
					stopPlaying();
					mPlayButton.setEnabled(true);
				}
			});
            mPlayButton.setEnabled(false);
        } catch (IOException e) {
            Log.e(TAG, "prepare() failed");
        }
    }
    private void stopPlaying() {
    	if(mPlayer!=null){
                mPlayer.stop();
	        mPlayer.release();
	        mPlayer = null;
    	}
    }
    
    class RecordButton extends Button {
        boolean mStartRecording = true;
        public RecordButton(Context ctx) {
            super(ctx);
            setText("Start recording");
            setOnClickListener(clicker);
        }
        OnClickListener clicker = new OnClickListener() {
            public void onClick(View v) {
                onRecord(mStartRecording);
                if (mStartRecording) {
                    setText("Stop recording");
                } else {
                    setText("Start recording");
                }
                mStartRecording = !mStartRecording;
            }
        };
       
    }
    class PlayButton extends Button {
        public PlayButton(Context ctx) {
            super(ctx);
            setText("Start playing");
            setOnClickListener(clicker);
        }
        OnClickListener clicker = new OnClickListener() {
            public void onClick(View v) {
            	startPlaying();
            }
        };
        
    }
    
	class Fileter implements FilenameFilter {
		public boolean accept(File dir, String filename) {
			// TODO Auto-generated method stub
			return filename.equals(".amr");
		}
	}
    
	
	/**
     * 上传文件
     * @param urlStr 服务器地址
     * @param file 需要上传的文件
     * @return 上传是否成功
     */
    private boolean uploadFile(String urlStr,File file){
    	try {
    		String end = "\r\n";
    	    String hyphens = "--";
    	    String boundary = "*****";
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
			/* 允许使用输入流,输出流,不允许使用缓存*/
			conn.setDoInput(true);
			conn.setDoOutput(true);
			conn.setUseCaches(false);
			/* 请求方式*/
			conn.setRequestMethod("POST");
			conn.setRequestProperty("Charset", "UTF-8");
			conn.setRequestProperty("Connection", "Keep-Alive");
			conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
			
			/* 当文件不为空,把文件包装并且上传*/
			Log.e(TAG, file.toString());
			if(file != null){
				DataOutputStream ds = new DataOutputStream(conn.getOutputStream());
				/* name里面的值为服务器端需要key   只有这个key 才可以得到对应的文件
				 * filename是文件的名字,包含后缀名的   比如:abc.png*/
				ds.writeBytes(hyphens + boundary + end);
				ds.writeBytes("Content-Disposition: form-data; " + "name=\"file1\";filename=\"" + 
						file.getName() +"\"" + end);
				ds.writeBytes(end);
				
				InputStream input = new FileInputStream(file);
				int size = 1024;
				byte[] buffer = new byte[size];
				int length = -1;
				/* 从文件读取数据至缓冲区*/
				while((length = input.read(buffer)) != -1){
					ds.write(buffer, 0, length);
				}
				input.close();
				ds.writeBytes(end);
				ds.writeBytes(hyphens + boundary + hyphens + end);
				ds.flush();
				
				/* 获取响应码*/
//				Log.e(TAG, "ResponseCode==="+conn.getResponseCode());
				if(conn.getResponseCode() == 200){
					return true;
				}
			}
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return false;
    }
    
}

分享到:
评论

相关推荐

    mediaRecorder录音以及播放

    简单的录音以及播放处理;mediaRecorder以文件形式录制,由mediaplayer播放。

    MediaRecorder与MediaPlayer的使用

    在Android开发中,MediaRecorder和MediaPlayer是两个非常重要的类,它们分别用于音频、视频的录制和播放。在本教程中,我们将深入探讨这两个类的使用方法,并通过一个实际的案例——"MyRecorder"来理解其工作原理。 ...

    Android Media Recorder录音与播放

    在"Android Media Recorder录音与播放"这个主题中,我们将深入探讨如何利用MediaRecorder类进行高质量的音频录制以及如何回放这些录制内容。MediaRecorder提供了比Intent录音更丰富的功能,比如自定义编码格式、调整...

    Android采用MediaRecorder进行录音和播放的源码

    本文将深入探讨如何使用MediaRecorder进行录音和播放操作,通过源码解析来帮助开发者理解其实现原理。 首先,我们来看录音部分。在Android中,使用MediaRecorder进行录音通常包括以下步骤: 1. 初始化...

    Android进行录音播放1(存储到指定文件夹)

    创建MediaPlayer实例,使用setDataSource()方法设置录音文件路径,然后调用prepare()准备播放,最后调用start()开始播放。同样,播放完毕后,别忘了调用release()释放资源。 6. 处理权限: 由于Android 6.0(API...

    MediaRecorder语音录制播放

    ### MediaPlayer播放录音 完成录制后,我们可以使用`MediaPlayer`类来播放音频文件。以下是一般的播放流程: 1. **初始化MediaPlayer** 创建`MediaPlayer`对象,并设置要播放的音频文件: ```java MediaPlayer ...

    Android 一个类实现录音与播放(MediaRecorder)

    总结起来,这个项目利用`MediaRecorder` 实现了简单的录音功能,使用`MediaPlayer` 进行播放,整个过程无需复杂的音频处理,适合初学者学习和参考。代码结构清晰,易于理解和维护,且经过测试,运行时没有bug,保证...

    Android使用MediaRecorder实现录音及播放

    在Android应用中实现录音和播放功能涉及多个步骤,包括配置MediaRecorder和MediaPlayer,处理权限,以及与UI交互。通过以上的代码示例,我们可以构建一个基本的录音和播放系统。不过,实际应用中可能需要考虑更多的...

    CallRecordingDemo:基于音频焦点触发的VOIP录制演示。 演示MediaRecorder和MediaPlayer的使用

    通话录音演示 这是一个简单的电话录音演示,用户可以用来捕获VOIP对话。 由于启动VOIP通信而暂时失去音频焦点时... 然后调用MediaPlayer播放记录的文件。 建造 可以使用Android Studio构建该项目,并且没有其他依赖项。

    安卓手机app录音和播放

    此外,考虑到用户体验,可以添加进度条显示录音或播放的进度,使用MediaRecorder和MediaPlayer提供的回调方法更新进度条的状态。例如,使用MediaPlayer的`OnBufferingUpdateListener`监听音频缓冲进度,使用`...

    Android录音和播放

    首先,我们需要了解Android系统提供的MediaRecorder和MediaPlayer类,这两个类是实现音频录制和播放的核心组件。 **一、录音** 1. **配置MediaRecorder** 在开始录音前,需要实例化MediaRecorder对象,并进行一...

    开机自动边录音边播放的例子

    综上所述,实现“开机自动边录音边播放”功能涉及了Android服务、BroadcastReceiver、MediaRecorder、MediaPlayer等多个核心组件和概念,需要综合运用这些知识点,结合具体代码实现,才能达到预期效果。在实际开发...

    Android录音、播放功能最佳学习项目app_安卓源码.zip

    录音涉及到MediaRecorder类,而播放则涉及MediaPlayer类。MediaRecorder用于捕捉音频或视频数据,并将其保存到文件;MediaPlayer则用于读取并播放多媒体文件。 2. **权限管理** 在Android中,录音功能需要申请`...

    android录音和播放

    总结,Android的录音和播放涉及到`MediaRecorder`和`MediaPlayer`这两个核心类,以及音频数据处理、网络请求和本地文件管理等多方面的知识。通过合理的设计和实现,我们可以构建出功能完善的音频应用。

    Android 录音及音频播放

    Android提供了多种API来处理音频,包括MediaRecorder用于录音,MediaPlayer用于播放音频,以及AudioTrack和AudioRecord等低级API。对于初学者,MediaRecorder和MediaPlayer是首选,因为它们易于理解和使用。 **录音...

    实现录音,播放,以及Socket的上传和下载

    总结起来,Android的录音和播放功能主要依赖MediaRecorder和MediaPlayer,而Socket通信涉及Socket和ServerSocket类。理解并熟练应用这些API,可以帮助开发者实现丰富的音频处理和网络通信功能。在实际项目中,还需要...

    Android 录音播放示例

    录音按钮点击事件触发录音操作,播放按钮则启动MediaPlayer播放音频。此外,可能还需要处理权限问题,如READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,确保应用有权限访问和操作外部存储上的音频文件。 总的...

    [Android]录音与播放录音实现[收集].pdf

    在Android平台上,录音...总的来说,Android中的录音和播放功能主要依赖于MediaRecorder和MediaPlayer这两个核心类。通过正确配置和管理这两个对象,我们可以轻松地实现各种录音和播放需求,为用户提供丰富的交互体验。

    android 录音与播放录音 带根据音频大小动态效果

    综上所述,Android的MediaRecorder和MediaPlayer类提供了录音和播放的功能,而AudioTrack则允许开发者对音频数据进行更精细的控制。通过结合这些API,你可以实现根据音频文件大小动态调整播放效果的功能,为用户提供...

    实现android录音以及播放功能

    这通常涉及到两个关键组件:`MediaRecorder`用于录音,`MediaPlayer`用于播放录音。本文将深入探讨这两个API的使用,以及如何在实际项目中整合它们来实现录音和播放功能。 首先,`MediaRecorder`是Android提供的一...

Global site tag (gtag.js) - Google Analytics