`

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的使用

    学习使用MediaRecorder与MediaPlayer,先录音后播放, 录音实现模拟声音大小的声波振幅图像, 播放录音实现倒计时。

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

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

    实现android录音以及播放功能

    公司最近要求项目添加微信一样的语音聊天功能,这个实例主要是实现android的录音以及播放录音的功能,封装了android API:MediaRecorder 和 MediaPlayer.

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

    NULL 博文链接:https://edison-cool911.iteye.com/blog/724855

    Android录音与播放

    android中 (1)使用MediaRecorder做录音 (2)使用MediaPlayer播放录音

    Android编程实现录音及保存播放功能的方法【附demo源码下载】

    在android中进行录音相对来说是比较简单的,使用系统提供的MediaRecorder类进行录音并保存,然后调用MediaPlayer进行播放。以下为xml配置文件代码: <RelativeLayout xmlns:android=...

    android 录音笔demo!!!(Baseadapter、file、MediaRecorder、AlertDialog)

    在录音或者播放时关闭activity;listview的item中需要为button设置不同的点击效果等等。 为了便于新手学习,在此还是罗列一下涉及的主要知识点: 1、Baseadapter 2、JAVA的file 3、MediaRecorder 4、较多的...

    蓝牙耳机录音

    MediaRecorder MediaPlayer 蓝牙耳机录音 播放功能 下载就能使用

    播放歌曲&录音&同步播放录音-audio与media资源共用

    实现KTV唱歌效果:播放歌曲,录音(可存储文件),同时说话者声音播放出来,利用AudioTrack,AudioRecord,MediaPlayer,MediaRecorder四个资源实现 (注意,4.3即API18以上不能同时播放录音,资源冲突)

    录音和播放(含话筒效果)

    1.使用MediaRecorder完成录音功能 2.在录音的过程中,话筒根据音量大小而改变 3.使用MediaPlayer完成播放录音功能(但不支持话筒效果) 4.代码简单适合初学者参考 2014-12-26

    Android音频操作:录音和播放

    此demo演示了在android上录音和播放的操作,主要使用:MediaPlayer,MediaRecorder 工具类。

    Android录音机

    一个简单的录音机,可以录音,播放等。主要用了MediaPlayer MediaRecorder的知识,需要的可以下载一下

    Android语音功能之录音

    大部分主流聊天软件的语音录制模块,灵活!音质高;Android仿微信语音 MediaPlayer负责播放语音 MediaRecorder录制语音,录制语音存放在sd卡wanghang文件夹下

    Android实现多媒体录音笔

    在录音或者播放时关闭activity;listview的item中需要为button设置不同的点击效果等等。 为了便于新手学习,在此还是罗列一下涉及的主要知识点: 1、Baseadapter 2、JAVA的file 3、MediaRecorder 4、较多的...

    AudioRecorderModule:包含录音和播放音频文件功能的片段

    AudioRecorderModuleAndroid Android片段(AudioFragment)包含录制和播放音频文件的功能。 这是功能齐全的录音机之类的应用程序(AudioFragment附在... AudioFragment使用Android的MediaPlayer和MediaRecorder类。

    Android录音、回放的小栗子

    分别使用AudioRecord MediaRecorder进行...所生成的".raw"格式的裸音频尚未实现AudioTrack的播放,仅使用MediaPlayer对".wav"和".amr"格式的音频实现了播放。使用AudioTrack实现".pcm"格式音频播放的代码未包含在内……

    MyVoiceApplication.zip

    录音工具:音频录音工具类的封装,录音文件本地保存和播放。

    Android录音播放管理工具

    1、语音播放直接用系统工具就好了,这个就不多说了,根据传入的路径(网络路径或本地路径均可)播放音频文件 /** * Created by zhb on 2017/1/16. ... MediaPlayer mp = new MediaPlayer(); try

    ophone多媒体编程

    7.2.2 MediaPlayer的状态 281 7.2.3 音乐播放器实例 284 7.2.4 播放视频 296 7.3 录制音频 299 7.3.1 MediaRecorder的状态图 299 7.3.2 录音器实例 301 7.4 MP3文件格式分析 306 7.4.1 MP3文件介绍 307 ...

Global site tag (gtag.js) - Google Analytics