亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android音頻錄制MediaRecorder之簡易的錄音軟件實現代碼

2020-04-11 11:55:49
字體:
來源:轉載
供稿:網友

使用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.VeVB.COm/201401/yuanma/MediaRecorderTest(VeVB.COm).rar

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
高清欧美性猛交xxxx黑人猛交| 亚洲国产婷婷香蕉久久久久久| 久久久伊人日本| 国产女精品视频网站免费| 日本一区二区三区四区视频| 日韩天堂在线视频| 成人www视频在线观看| 国产xxx69麻豆国语对白| 成人信息集中地欧美| 久久视频在线播放| 欧美裸身视频免费观看| 69久久夜色精品国产69乱青草| 91色中文字幕| 精品视频—区二区三区免费| 久久精品亚洲精品| 国产精品第100页| 亚洲第一页中文字幕| 国产精品中文字幕在线| 97热在线精品视频在线观看| 久久久成人av| 国产成人精品视频在线| 欧美老女人性视频| 欧美精品电影免费在线观看| 亚洲精品suv精品一区二区| 亚洲国产精品va在线观看黑人| 高清欧美电影在线| 欧美日韩美女在线观看| 欧美日韩亚洲成人| 91麻豆国产语对白在线观看| 亚洲国产精品va在看黑人| 欧美日韩高清在线观看| 一区二区三区视频免费| 国内精品在线一区| 51ⅴ精品国产91久久久久久| 少妇av一区二区三区| 91av视频在线播放| 久久韩国免费视频| 国产视频精品一区二区三区| 国内偷自视频区视频综合| 国产剧情久久久久久| 97精品免费视频| 欧美另类老肥妇| 日本成人在线视频网址| 精品久久香蕉国产线看观看亚洲| 国产精品免费小视频| 欧美在线视频网站| 久久免费精品视频| 欧美成人小视频| 色青青草原桃花久久综合| 久久乐国产精品| 欧美激情按摩在线| 国产美女91呻吟求| 在线免费观看羞羞视频一区二区| 国外视频精品毛片| 日韩欧美在线观看| 26uuu久久噜噜噜噜| 欧美大全免费观看电视剧大泉洋| 国产精品91免费在线| 久久久久久久一| 97超级碰碰人国产在线观看| 亚洲人成网站免费播放| 日韩美女在线观看一区| 98午夜经典影视| 久久婷婷国产麻豆91天堂| 2019亚洲日韩新视频| 亚洲精品久久久久久久久久久久久| 欧亚精品在线观看| 欧美中文在线视频| 成人精品福利视频| 亚洲bt欧美bt日本bt| 久久久精品国产网站| 91国偷自产一区二区三区的观看方式| 欧美日韩日本国产| 国产精品白嫩初高中害羞小美女| 亚洲理论在线a中文字幕| 国产精品pans私拍| 欧美性色19p| 亚洲国产毛片完整版| 午夜精品久久久久久久男人的天堂| 日韩久久免费电影| 国产精品久久久久久久天堂| 激情成人中文字幕| 国产91成人video| 中文字幕一区二区三区电影| 国产精品久久久久久久久久久久久久| 日韩在线观看免费av| 精品亚洲夜色av98在线观看| 亚洲乱码av中文一区二区| 在线观看日韩专区| 国产精品都在这里| 久久久久久久999精品视频| 久久久久久久久久久久av| 4438全国亚洲精品在线观看视频| 亚洲国产精品va在线看黑人动漫| 日本午夜在线亚洲.国产| 日韩最新av在线| 国产a∨精品一区二区三区不卡| 98精品国产高清在线xxxx天堂| 色香阁99久久精品久久久| 亚洲国产欧美一区| 美女撒尿一区二区三区| 91视频-88av| 精品国产精品自拍| 免费不卡欧美自拍视频| 亲子乱一区二区三区电影| 国产精品视频一区二区三区四| 欧美肥臀大乳一区二区免费视频| 久久青草福利网站| 精品国产91乱高清在线观看| 成人444kkkk在线观看| 欧美高清在线视频观看不卡| 亚洲精品国产品国语在线| 78色国产精品| 国产免费成人av| 姬川优奈aav一区二区| 欧美在线视频一区二区| 91亚洲国产精品| 尤物yw午夜国产精品视频明星| 日韩亚洲欧美中文高清在线| 91黄色8090| 日韩av手机在线| 国产精品成久久久久三级| 在线观看欧美www| 萌白酱国产一区二区| 国产精品人成电影| 日本一区二区在线免费播放| 亚洲人av在线影院| 久久精彩免费视频| 国产精品成人一区二区三区吃奶| 国产精品视频精品视频| 2018中文字幕一区二区三区| 国产精品美女在线观看| 欧美大片网站在线观看| 色久欧美在线视频观看| 久久久久久久av| 亚洲激情成人网| 亚洲欧美色图片| 欧美大片欧美激情性色a∨久久| 亚洲精品在线视频| 97视频在线播放| 午夜精品久久久久久久男人的天堂| 久久99久久99精品中文字幕| www.久久色.com| 日韩国产欧美精品一区二区三区| 欧美精品videosex性欧美| 亚洲欧洲美洲在线综合| 国产精品丝袜一区二区三区| 日产日韩在线亚洲欧美| 国产精品无av码在线观看| 国产精品手机播放| 成人黄色大片在线免费观看| 日韩国产一区三区| www.亚洲天堂| 国产精品丝袜高跟| 亚洲高清久久久久久| 久久精品美女视频网站| 国产成人一区二区三区小说| 精品国产91乱高清在线观看| 欧美性受xxxx黑人猛交| 亚洲一区二区三区毛片| 国产91精品高潮白浆喷水| 国产精品99久久久久久久久| 国产精品美女主播在线观看纯欲| 日本精品va在线观看|