Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android開發指南(32) —— Multimedia and Camera - Audio Capture

Android開發指南(32) —— Multimedia and Camera - Audio Capture

編輯:Android開發實例

前言

  本章內容為Android開發者指南的 Framework Topics/Multimedia and Camera/Audio Capture章節,版本為Android 4.0 r1,翻譯來自:"呆呆大蝦"。

  

 

音頻捕獲

譯者署名: 呆呆大蝦

譯者微博:http://weibo.com/popapa

版本:Android 4.0 r1

原文

http://developer.android.com/guide/topics/media/audio-capture.html

 

在本文中

進行音頻捕獲

代碼示例

 

關鍵類

MediaRecorder

 

相關例程

JetBoy

 

參閱

Android支持的媒體格式

數據存儲

MediaPlayer

 

Android的多媒體框架包含了對多種通用媒體的捕獲和編碼支持,因此可以很容易地在程序中加入音頻信息。在設備的硬件支持時,可以利用MediaRecorder API錄制音頻。

本文展示了如何編寫程序捕獲來自話筒的音頻、保存並回放此音頻。

注意: 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() 來釋放資源。

 

示例:錄音及其回放

下例中的類演示了如何設置、開始、停止音頻捕獲,以及播放錄制的音頻文件。

/* 

 * 本程序需要讀取外部存儲的權限

 * 如果輸出文件寫入外部存儲,那就還需要寫入權限來錄音。

 * 這些權限必須在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; 

 

    private void onRecord(boolean start) { 

        if (start) { 

            startRecording(); 

        } else { 

            stopRecording(); 

        } 

    } 

 

    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() 失敗"); 

        } 

    } 

 

    private void stopPlaying() { 

        mPlayer.release(); 

        mPlayer = null; 

    } 

 

    private void startRecording() { 

        mRecorder = new MediaRecorder(); 

        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()失敗"); 

        } 

 

        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(); 

        if (mRecorder != null) { 

            mRecorder.release(); 

            mRecorder = null; 

        } 

 

        if (mPlayer != null) { 

            mPlayer.release(); 

            mPlayer = null; 

        } 

    } 

}

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