zoukankan      html  css  js  c++  java
  • Android使用的开发MediaRecorder录制声音

             至 Android 录制声音的应用,Android提供 MediaRecorder 类别。大约MediaRecorder可以参考一个特定的解释《Android开发之MediaRecorder类具体解释》。

    使用MediaRecorder录制声音的步骤:

    1) 创建 MediaRecorder 对象。

    2) 调用MediaRecorder对象的setAudioSource()方法设置声音来源。一般传入 MediaRecorder. AudioSource.MIC參数指定录制来自麦克风的声音。

    3) 调用MediaRecorder对象的setOutputFormat()设置所录制的音频文件的格式

    4) 调用MediaRecorder 对象的setAudioEncoder()、setAudioEncodingBitRate(intbitRate)、 setAudioSamplingRate(int samplingRate)设置所录制的声音的编码格式编码位率採样率等。 这些參数将能够控制所录制的声音的品质、文件的大小。一般来说,声音品质越好,声音文件越大。

    5) 调用MediaRecorder的setOutputFile(Stringpath)方法设置录制的音频文件的保存位置

    6) 调用MediaRecorder的prepare()方法准备录制。        

    7) 调用MediaRecorder对象的start()方法開始录制

    8) 录制完毕,调用MediaRecorder对象的stop()方法停止录制。并调用release()方法释放资源

    提示:1.上面的步骤中第3和第4两个步骤千万不能搞反,否则程序将会抛出lllegalStateException 异常。

    2. 设置声音编码格式要和声音的输出格式相相应。不然录制的音频文件不标准。

    假设编码格式和输出格式不正确应,录制出的音频文件尽管能够播放。可是将多个这类音频文件合并之后。会出现仅仅播放合并文件里的部分文件

     应用实例

    使用MediaRecorder录制声音:

    实例代码:

    <span style="font-size:18px;">package com.jph.recordsound;
    
    import java.io.File;
    import org.crazyit.sound.R;
    import android.app.Activity;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Environment;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageButton;
    import android.widget.Toast;
    
    
    public class RecordSound extends Activity
    	implements OnClickListener
    {
    	// 定义界面上的两个button
    	ImageButton record, stop;
    	// 系统的音频文件
    	File soundFile;
    	MediaRecorder mRecorder;
    
    	@Override
    	public void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		// 获取程序界面中的两个button
    		record = (ImageButton) findViewById(R.id.record);
    		stop = (ImageButton) findViewById(R.id.stop);
    		// 为两个button的单击事件绑定监听器
    		record.setOnClickListener(this);
    		stop.setOnClickListener(this);
    	}
    
    	@Override
    	public void onDestroy()
    	{
    		if (soundFile != null && soundFile.exists())
    		{
    			// 停止录音
    			mRecorder.stop();
    			// 释放资源
    			mRecorder.release();
    			mRecorder = null;
    		}
    		super.onDestroy();
    	}
    
    	@Override
    	public void onClick(View source)
    	{
    		switch (source.getId())
    		{
    		// 单击录音button
    			case R.id.record:
    				if (!Environment.getExternalStorageState().equals(
    					android.os.Environment.MEDIA_MOUNTED))
    				{
    					Toast.makeText(RecordSound.this, "SD卡不存在。请插入SD卡。",
    						Toast.LENGTH_SHORT).show();
    					return;
    				}
    				try
    				{
    					// 创建保存录音的音频文件
    					soundFile = new File(Environment
    						.getExternalStorageDirectory().getCanonicalFile()
    						+ "/sound.amr");
    					mRecorder = new MediaRecorder();
    					// 设置录音的声音来源
    					mRecorder.setAudioSource(MediaRecorder
    						.AudioSource.MIC);
    					// 设置录制的声音的输出格式(必须在设置声音编码格式之前设置)
    					mRecorder.setOutputFormat(MediaRecorder
    						.OutputFormat.AMR_NB);
    					// 设置声音编码的格式
    					mRecorder.setAudioEncoder(MediaRecorder
    						.AudioEncoder.AMR_NB);
    					mRecorder.setOutputFile(soundFile.getAbsolutePath());
    					mRecorder.prepare();
    					// 開始录音
    					mRecorder.start();  //①
    				}
    				catch (Exception e)
    				{
    					e.printStackTrace();
    				}
    				break;
    			// 单击停止button
    			case R.id.stop:
    				if (soundFile != null && soundFile.exists())
    				{
    					// 停止录音
    					mRecorder.stop();  //②
    					// 释放资源
    					mRecorder.release();  //③
    					mRecorder = null;
    				}
    				break;
    		}
    	}
    }</span>

    程序执行效果图:

    使用MediaRecorder录制声音

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    C#设计模式之订阅发布模式
    ASP.NET Core依赖注入(DI)
    ASP.NET 开源导入导出库Magicodes.IE 完成Csv导入导出
    .NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
    曾经优秀的人,怎么就突然不优秀了?
    IDEA中文注释难看的简单解决办法
    JasperReport报表中输出Excel时,部分列不显示的问题
    为什么Spring Security看不见登录失败或者注销的提示
    JQuery文件上传插件JQuery.upload.js的用法简介
    一个很酷炫也挺实用的JS库leader-line
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4717913.html
Copyright © 2011-2022 走看看