Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android多媒體學習九:利用MediaRecorder類實現自己的音頻錄制程序

Android多媒體學習九:利用MediaRecorder類實現自己的音頻錄制程序

編輯:Android開發實例

在上一篇中,我們在代碼中有

 

  1. case R.id.btn2:  
  2.     //通過MediaRecorder類來實現自己的音頻錄制程序  
  3.     Intent intent2 = new Intent();  
  4.     intent2.setClass(this, MyAudioRecord.class);  
  5.     startActivityForResult(intent2, 1);  
  6.     break; 

這是啟動我們自己定義的音頻錄制程序來完成錄制工作。

代碼如下:

 

  1. package demo.camera;  
  2. import java.io.File;  
  3. import java.io.IOException;  
  4. import android.app.Activity;  
  5. import android.content.ContentValues;  
  6. import android.content.Intent;  
  7. import android.media.MediaPlayer;  
  8. import android.media.MediaRecorder;  
  9. import android.net.Uri;  
  10. import android.os.Bundle;  
  11. import android.os.Environment;  
  12. import android.provider.MediaStore;  
  13. import android.view.View;  
  14. import android.widget.Button;  
  15. import android.widget.TextView;  
  16. /**  
  17.  * 這個是利用MediaRecorder類來實現自己的音頻錄制程序  
  18.  *   
  19.  * 為了可以錄制音頻我們需要RECORD_AUDIO權限  
  20.  * 為了可以寫入SDCard,我們需要WRITE_EXTERNAL_STORAGE權限  
  21.  * @author Administrator  
  22.  *  
  23.  */ 
  24. public class MyAudioRecord extends Activity {  
  25.       
  26.     private TextView stateView;  
  27.       
  28.     private Button btnStart,btnStop,btnPlay,btnFinish;  
  29.       
  30.     private MediaRecorder recorder;  
  31.       
  32.     private MediaPlayer player;  
  33.       
  34.     private File audioFile;  
  35.       
  36.     private Uri fileUri;  
  37.       
  38.     public void onCreate(Bundle savedInstanceState){  
  39.         super.onCreate(savedInstanceState);  
  40.         setContentView(R.layout.my_audio_record);  
  41.           
  42.         stateView = (TextView)this.findViewById(R.id.view_state);  
  43.         stateView.setText("准備開始");  
  44.         btnStart = (Button)this.findViewById(R.id.btn_start);  
  45.         btnStop = (Button)this.findViewById(R.id.btn_stop);  
  46.         btnPlay = (Button)this.findViewById(R.id.btn_play);  
  47.         btnFinish = (Button)this.findViewById(R.id.btn_finish);  
  48.           
  49.         btnStop.setEnabled(false);  
  50.         btnPlay.setEnabled(false);  
  51.           
  52.     }  
  53.       
  54.       
  55.     public void onClick(View v){  
  56.         int id = v.getId();  
  57.         switch(id){  
  58.         case R.id.btn_start:  
  59.             //開始錄制  
  60.             //我們需要實例化一個MediaRecorder對象,然後進行相應的設置  
  61.             recorder = new MediaRecorder();  
  62.             //指定AudioSource 為MIC(Microphone audio source ),這是最長用的  
  63.             recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  
  64.             //指定OutputFormat,我們選擇3gp格式  
  65.             //其他格式,MPEG-4:這將指定錄制的文件為mpeg-4格式,可以保護Audio和Video  
  66.             //RAW_AMR:錄制原始文件,這只支持音頻錄制,同時要求音頻編碼為AMR_NB  
  67.             //THREE_GPP:錄制後文件是一個3gp文件,支持音頻和視頻錄制  
  68.             recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  
  69.             //指定Audio編碼方式,目前只有AMR_NB格式  
  70.             recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
  71.             //接下來我們需要指定錄制後文件的存儲路徑  
  72.             File fpath = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/data/files/");  
  73.             fpath.mkdirs();//創建文件夾  
  74.             try {  
  75.                 //創建臨時文件  
  76.                 audioFile = File.createTempFile("recording", ".3gp", fpath);  
  77.             } catch (IOException e) {  
  78.                 // TODO Auto-generated catch block  
  79.                 e.printStackTrace();  
  80.             }  
  81.               
  82.             recorder.setOutputFile(audioFile.getAbsolutePath());  
  83.               
  84.             //下面就開始錄制了  
  85.             try {  
  86.                 recorder.prepare();  
  87.             } catch (IllegalStateException e) {  
  88.                 // TODO Auto-generated catch block  
  89.                 e.printStackTrace();  
  90.             } catch (IOException e) {  
  91.                 // TODO Auto-generated catch block  
  92.                 e.printStackTrace();  
  93.             }  
  94.               
  95.             recorder.start();  
  96.               
  97.             stateView.setText("正在錄制");  
  98.             btnStart.setEnabled(false);  
  99.             btnPlay.setEnabled(false);  
  100.             btnStop.setEnabled(true);  
  101.               
  102.             break;  
  103.         case R.id.btn_stop:  
  104.             recorder.stop();  
  105.             recorder.release();  
  106.               
  107.             //然後我們可以將我們的錄制文件存儲到MediaStore中  
  108.             ContentValues values = new ContentValues();  
  109.             values.put(MediaStore.Audio.Media.TITLE, "this is my first record-audio");  
  110.             values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis());  
  111.             values.put(MediaStore.Audio.Media.DATA, audioFile.getAbsolutePath());  
  112.             fileUri = this.getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);  
  113.             //錄制結束後,我們實例化一個MediaPlayer對象,然後准備播放  
  114.             player = new MediaPlayer();  
  115.             player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {  
  116.                   
  117.                 @Override 
  118.                 public void onCompletion(MediaPlayer arg0) {  
  119.                     //更新狀態  
  120.                     stateView.setText("准備錄制");  
  121.                     btnPlay.setEnabled(true);  
  122.                     btnStart.setEnabled(true);  
  123.                     btnStop.setEnabled(false);  
  124.                 }  
  125.             });  
  126.               
  127.             //准備播放  
  128.             try {  
  129.                 player.setDataSource(audioFile.getAbsolutePath());  
  130.                 player.prepare();  
  131.             } catch (IllegalArgumentException e) {  
  132.                 // TODO Auto-generated catch block  
  133.                 e.printStackTrace();  
  134.             } catch (IllegalStateException e) {  
  135.                 // TODO Auto-generated catch block  
  136.                 e.printStackTrace();  
  137.             } catch (IOException e) {  
  138.                 // TODO Auto-generated catch block  
  139.                 e.printStackTrace();  
  140.             }  
  141.               
  142.             //更新狀態  
  143.             stateView.setText("准備播放");  
  144.             btnPlay.setEnabled(true);  
  145.             btnStart.setEnabled(true);  
  146.             btnStop.setEnabled(false);  
  147.             break;  
  148.         case R.id.btn_play:  
  149.             //播放錄音  
  150.             //注意,我們在錄音結束的時候,已經實例化了MediaPlayer,做好了播放的准備  
  151.             player.start();  
  152.             //更新狀態  
  153.             stateView.setText("正在播放");  
  154.             btnStart.setEnabled(false);  
  155.             btnStop.setEnabled(false);  
  156.             btnPlay.setEnabled(false);  
  157.               
  158.             //在播放結束的時候也要更新狀態  
  159.             break;  
  160.         case R.id.btn_finish:  
  161.             //完成錄制,返回錄制的音頻的Uri  
  162.             Intent intent = new Intent();  
  163.             intent.setData(fileUri);  
  164.             this.setResult(RESULT_OK, intent);  
  165.             this.finish();  
  166.             break;  
  167.               
  168.         }  
  169.     }  
  170. }  
  171.  

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved