Android音频录制MediaRecorder之简易的录音软件实现代码_Android

使用MediaRecorder的步骤:
1、创建MediaRecorder对象
2、调用MediRecorder对象的setAudioSource()方法设置声音的来源,一般传入MediaRecorder.MIC
3、调用MediaRecorder对象的setOutputFormat()设置所录制的音频文件的格式
4、调用MediaRecorder对象的setAudioRncoder()、setAudioEncodingBitRate(int bitRate)、setAudioSamlingRate(int SamplingRate)设置所录音的编码格式、编码位率、采样率等,
5、调用MediaRecorder对象的setOutputFile(String path)方法设置录制的音频文件的保存位置
6、调用MediaRecoder对象的Prepare()方法准备录制
7、调用MediaRecoder对象的start()方法开始录制
8、调用MediaRecoder对象的stop()方法停止录制,并调用release()方法释放资源

实例:

复制代码 代码如下:

    <uses-permission  android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"/>
    <uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission  android:name="android.permission.RECORD_AUDIO"/>

复制代码 代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

   
    <LinearLayout
        android:id="@+id/li1"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button android:id="@+id/start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/start"/>
         <Button android:id="@+id/stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/stop"/>
    </LinearLayout>
    <ListView
        android:id="@+id/list"
        android:layout_below="@id/li1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ListView>

</RelativeLayout>

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/show_file_name" />

    <Button
        android:id="@+id/bt_list_play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/play"/>
    <Button  android:id="@+id/bt_list_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/list_stop"/>

</LinearLayout>

复制代码 代码如下:

package com.android.xiong.mediarecordertest;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

 private Button start;
 private Button stop;
 private ListView listView;
 // 录音文件播放
 private MediaPlayer myPlayer;
 // 录音
 private MediaRecorder myRecorder;
 // 音频文件保存地址
 private String path;
 private String paths = path;
 private File saveFilePath;
 // 所录音的文件
 String[] listFile = null;

 ShowRecorderAdpter showRecord;
 AlertDialog aler = null;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  start = (Button) findViewById(R.id.start);
  stop = (Button) findViewById(R.id.stop);
  listView = (ListView) findViewById(R.id.list);
  myPlayer = new MediaPlayer();
  myRecorder = new MediaRecorder();
  // 从麦克风源进行录音
  myRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
  // 设置输出格式
  myRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
  // 设置编码格式
  myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
  showRecord = new ShowRecorderAdpter();
  if (Environment.getExternalStorageState().equals(
    Environment.MEDIA_MOUNTED)) {
   try {
    path = Environment.getExternalStorageDirectory()
      .getCanonicalPath().toString()
      + "/XIONGRECORDERS";
    File files = new File(path);
    if (!files.exists()) {
     files.mkdir();
    }
    listFile = files.list();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }

  start.setOnClickListener(this);
  stop.setOnClickListener(this);
  if (listFile != null) {
   listView.setAdapter(showRecord);
  }

 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

 class ShowRecorderAdpter extends BaseAdapter {

  @Override
  public int getCount() {
   return listFile.length;
  }

  @Override
  public Object getItem(int arg0) {
   return arg0;
  }

  @Override
  public long getItemId(int arg0) {
   return arg0;

  }

  @Override
  public View getView(final int postion, View arg1, ViewGroup arg2) {
   View views = LayoutInflater.from(MainActivity.this).inflate(
     R.layout.list_show_filerecorder, null);
   TextView filename = (TextView) views
     .findViewById(R.id.show_file_name);
   Button plays = (Button) views.findViewById(R.id.bt_list_play);
   Button stop = (Button) views.findViewById(R.id.bt_list_stop);

   filename.setText(listFile[postion]);
   // 播放录音
   plays.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
     try {
      myPlayer.reset();
      myPlayer.setDataSource(path + "/" + listFile[postion]);
      if (!myPlayer.isPlaying()) {

       myPlayer.prepare();
       myPlayer.start();
      } else {
       myPlayer.pause();
      }

     } catch (IOException e) {
      e.printStackTrace();
     }
    }
   });
   // 停止播放
   stop.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
     if (myPlayer.isPlaying()) {
      myPlayer.stop();
     }
    }
   });
   return views;
  }

 }

 @Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.start:
   final EditText filename = new EditText(this);
   Builder alerBuidler = new Builder(this);
   alerBuidler
     .setTitle("请输入要保存的文件名")
     .setView(filename)
     .setPositiveButton("确定",
       new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog,
          int which) {
         String text = filename.getText().toString();
         try {
          paths = path
            + "/"
            + text
            + new SimpleDateFormat(
              "yyyyMMddHHmmss").format(System
              .currentTimeMillis())
            + ".amr";
          saveFilePath = new File(paths);
          myRecorder.setOutputFile(saveFilePath
            .getAbsolutePath());
          saveFilePath.createNewFile();
          myRecorder.prepare();
          // 开始录音
          myRecorder.start();
          start.setText("正在录音中。。");
          start.setEnabled(false);
          aler.dismiss();
          // 重新读取 文件
          File files = new File(path);
          listFile = files.list();
          // 刷新ListView
          showRecord.notifyDataSetChanged();
         } catch (Exception e) {
          e.printStackTrace();
         }

        }
       });
   aler = alerBuidler.create();
   aler.setCanceledOnTouchOutside(false);
   aler.show();
   break;
  case R.id.stop:
   if (saveFilePath.exists() && saveFilePath != null) {
    myRecorder.stop();
    myRecorder.release();
    // 判断是否保存 如果不保存则删除
    new AlertDialog.Builder(this)
      .setTitle("是否保存该录音")
      .setPositiveButton("确定", null)
      .setNegativeButton("取消",
        new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog,
           int which) {
          saveFilePath.delete();
          // 重新读取 文件
          File files = new File(path);
          listFile = files.list();
          // 刷新ListView
          showRecord.notifyDataSetChanged();
         }
        }).show();

   }
   start.setText("录音");
   start.setEnabled(true);
  default:
   break;
  }

 }

 @Override
 protected void onDestroy() {
  // 释放资源
  if (myPlayer.isPlaying()) {
   myPlayer.stop();
   myPlayer.release();
  }
  myPlayer.release();
  myRecorder.release();
  super.onDestroy();
 }

}

源码下载:http://xiazai.jb51.net/201401/yuanma/MediaRecorderTest(jb51.net).rar

时间: 2024-10-26 01:02:44

Android音频录制MediaRecorder之简易的录音软件实现代码_Android的相关文章

Android音频录制MediaRecorder之简易的录音软件实现代码

使用MediaRecorder的步骤:1.创建MediaRecorder对象2.调用MediRecorder对象的setAudioSource()方法设置声音的来源,一般传入MediaRecorder.MIC3.调用MediaRecorder对象的setOutputFormat()设置所录制的音频文件的格式4.调用MediaRecorder对象的setAudioRncoder().setAudioEncodingBitRate(int bitRate).setAudioSamlingRate(i

Android手机通过蓝牙连接佳博打印机的实例代码_Android

所使用的打印机为佳博打印机,支持蓝牙.wifi.usb我所使用的是通过蓝牙来连接. 在网上找到一个佳博官方针对安卓开发的App源码,但是各种的跳转,没有看太懂,所以又去问度娘,找到了一个不错的文章 Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发. 1. 首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限 // 管理蓝牙设备的权限 <uses-permissionandroid:name="

Android自定义View实现带数字的进度条实例代码_Android

第一步.效果展示 图1.蓝色的进度条 图2.红色的进度条 图3.多条颜色不同的进度条 图4.多条颜色不同的进度条 第二步.自定义ProgressBar实现带数字的进度条 0.项目结构 如上图所示:library项目为自定义的带数字的进度条NumberProgressBar的具体实现,demo项目为示例项目以工程依赖的方式引用library项目,然后使用自定义的带数字的进度条NumberProgressBar来做展示   如上图所示:自定义的带数字的进度条的library项目的结构图   如上图所

Android仿支付宝笑脸刷新加载动画的实现代码_Android

看到支付宝的下拉刷新有一个笑脸的动画,因此自己也动手实现一下.效果图如下: 一.总体思路 1.静态部分的笑脸. 这一部分的笑脸就是一个半圆弧,加上两颗眼睛,这部分比较简单,用于一开始的展示. 2.动态笑脸的实现. 2.1.先是从底部有一个圆形在运动,运动在左眼位置时把左眼给绘制,同时圆形继续运动,运动到右眼位置时绘制右眼,圆形继续运动到最右边的位置. 2.2.当上面的圆形运动到最右边时候,开始不断绘制脸,从右向左,脸不断增长,这里脸设置为接近半个圆形的大小. 2.3.当脸画完的时候,开始让脸旋转

Android 通过httppost上传文本文件到服务器的实例代码_Android

废话不多说了,直接给大家贴关键代码了. /** * 往服务器上上传文本 比如log日志 * @param urlstr 请求的url * @param uploadFile log日志的路径 * /mnt/shell/emulated/0/LOG/LOG.log * @param newName log日志的名字 LOG.log * @return */ public static void httpPost(Activity activity,String urlstr,String uplo

Android程序开发之Fragment实现底部导航栏实例代码_Android

流行的应用的导航一般分为两种,一种是底部导航,一种是侧边栏. 说明 IDE:AS,Android studio; 模拟器:genymotion; 实现的效果,见下图. 具体实现 为了讲明白这个实现过程,我们贴出来的代码多一写,这样更方便理解 [最后还会放出完整的代码实现] .看上图的界面做的比较粗糙,但实现过程的骨架都具有了,想要更完美的设计,之后自行完善吧 ^0^. 布局 通过观察上述效果图,发现任意一个选项页面都有三部分组成: 顶部去除ActionBar后的标题栏: 中间一个Fragment

Android开发Popwindow仿微信右上角下拉菜单实例代码_Android

先给大家看下效果图: MenuPopwindow: package com.cloudeye.android.cloudeye.view; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; import android.view.View; import an

android ListView内数据的动态添加与删除实例代码_Android

main.xml 文件:  复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:layout_width="fill_parent"       android:layout_height

Android简单的利用MediaRecorder进行录音的实例代码_Android

复制代码 代码如下: package com.ppmeet;  import java.io.IOException;  import android.app.Activity;  import android.graphics.PixelFormat;  import android.media.MediaRecorder;  import android.os.Bundle;  import android.view.View;  import android.view.View.OnCli