Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android錄音與播放

Android錄音與播放

編輯:關於Android編程

Android多媒體框架包含獲取和編碼多種音頻格式的支持,所以你可以輕松地把音頻合並到你的應用中.如果設備支持,你可以使用MediaRecorder APIs 進行錄音.

本章向你展示如何寫一個應用從設備上的microphone獲取音頻,然後保存並回放.

注:Android模擬器不具有錄音的能力,但是真實的設備一般都具有此功能.

 

執行音頻獲取
從設備獲取音頻比回放音頻或視頻要復雜一點,但是也還算簡單:


創建一個android.media.MediaRecorder的新實例.
使用MediaRecorder.setAudioSource()設置音頻源,一般要使用MediaRecorder.AudioSource.MIC.
使用MediaRecorder.setOutputFormat()設置輸出文件的格式.
使用MediaRecorder.setOutputFile()設置輸出文件的名字.
使用MediaRecorder.setAudioEncoder()設置音頻編碼.
調用MediaRecorder 實例的MediaRecorder.prepare().
MediaRecorder.start()開始獲取音頻.
調用MediaRecorder.stop().停止.
當你用完MediaRecorder實例後,調用MediaRecorder.release(),就會立即釋放資源.

 


示例:錄音並回放錄音

下面的例子演示了如何設置,開始以及停止音頻獲取,以及回放錄制的文件.

 

 

[java]
/*
 * 如果輸出文件被寫入外部存儲,
 * 本應用需要具有寫外部存儲的權限, 
 * 還要具有錄音的權限.這些權限必須
 * 在AndroidManifest.xml 文件中聲明,像這樣:
 *
 * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 * <uses-permission android:name="android.permission.RECORD_AUDIO" />
 *
 */ 
package com.android.audiorecordtest; 
 
import android.app.Activity; 
import android.widget.LinearLayout; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.content.Context; 
import android.util.Log; 
import android.media.MediaRecorder; 
import android.media.MediaPlayer; 
 
import java.io.IOException; 
 
 
public class AudioRecordTest extends Activity 

    private static final String LOG_TAG = "AudioRecordTest"; 
    private static String mFileName = null; 
   //錄音按鈕  
    private RecordButton mRecordButton = null; 
    private MediaRecorder mRecorder = null; 
   //回放按鈕  
    private PlayButton   mPlayButton = null; 
    private MediaPlayer   mPlayer = null; 
 
   //當錄音按鈕被click時調用此方法,開始或停止錄音  
    private void onRecord(boolean start) { 
        if (start) { 
            startRecording(); 
        } else { 
            stopRecording(); 
        } 
    } 
 
   //當播放按鈕被click時調用此方法,開始或停止播放  
    private void onPlay(boolean start) { 
        if (start) { 
            startPlaying(); 
        } else { 
            stopPlaying(); 
        } 
    } 
 
    private void startPlaying() { 
        mPlayer = new MediaPlayer(); 
        try { 
    //設置要播放的文件  
            mPlayer.setDataSource(mFileName); 
            mPlayer.prepare(); 
    //播放之  
            mPlayer.start(); 
        } catch (IOException e) { 
            Log.e(LOG_TAG, "prepare() failed"); 
        } 
    } 
 
    //停止播放  
    private void stopPlaying() { 
        mPlayer.release(); 
        mPlayer = null; 
    } 
 
    private void startRecording() { 
        mRecorder = new MediaRecorder(); 
        //設置音源為Micphone  
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
        //設置封裝格式  
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
        mRecorder.setOutputFile(mFileName); 
        //設置編碼格式  
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
 
        try { 
            mRecorder.prepare(); 
        } catch (IOException e) { 
            Log.e(LOG_TAG, "prepare() failed"); 
        } 
 
        mRecorder.start(); 
    } 
 
    private void stopRecording() { 
        mRecorder.stop(); 
        mRecorder.release(); 
        mRecorder = null; 
    } 
 
    //定義錄音按鈕  
    class RecordButton extends Button { 
        boolean mStartRecording = true; 
 
        OnClickListener clicker = new OnClickListener() { 
            public void onClick(View v) { 
                onRecord(mStartRecording); 
                if (mStartRecording) { 
                    setText("Stop recording"); 
                } else { 
                    setText("Start recording"); 
                } 
                mStartRecording = !mStartRecording; 
            } 
        }; 
 
        public RecordButton(Context ctx) { 
            super(ctx); 
            setText("Start recording"); 
            setOnClickListener(clicker); 
        } 
    } 
 
    //定義播放按鈕  
    class PlayButton extends Button { 
        boolean mStartPlaying = true; 
 
        OnClickListener clicker = new OnClickListener() { 
            public void onClick(View v) { 
                onPlay(mStartPlaying); 
                if (mStartPlaying) { 
                    setText("Stop playing"); 
                } else { 
                    setText("Start playing"); 
                } 
                mStartPlaying = !mStartPlaying; 
            } 
        }; 
 
        public PlayButton(Context ctx) { 
            super(ctx); 
            setText("Start playing"); 
            setOnClickListener(clicker); 
        } 
    } 
 
    //構造方法  
    public AudioRecordTest() { 
        mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 
        mFileName += "/audiorecordtest.3gp"; 
    } 
 
    @Override 
    public void onCreate(Bundle icicle) { 
        super.onCreate(icicle); 
        //構造界面  
        LinearLayout ll = new LinearLayout(this); 
        mRecordButton = new RecordButton(this); 
        ll.addView(mRecordButton, 
            new LinearLayout.LayoutParams( 
                ViewGroup.LayoutParams.WRAP_CONTENT, 
                ViewGroup.LayoutParams.WRAP_CONTENT, 
                0)); 
        mPlayButton = new PlayButton(this); 
        ll.addView(mPlayButton, 
            new LinearLayout.LayoutParams( 
                ViewGroup.LayoutParams.WRAP_CONTENT, 
                ViewGroup.LayoutParams.WRAP_CONTENT, 
                0)); 
        setContentView(ll); 
    } 
 
    @Override 
    public void onPause() { 
        super.onPause(); 
        //Activity暫停時釋放錄音和播放對象  
        if (mRecorder != null) { 
            mRecorder.release(); 
            mRecorder = null; 
        } www.2cto.com
 
        if (mPlayer != null) { 
            mPlayer.release(); 
            mPlayer = null; 
        } 
    } 


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