Android開發教學
Android 開發環境配置
Android 架構
Android 應用組件
Android Hello World示例
Android 資源組織和訪問
Android Activity
Android Service
Android廣播接收器
Android內容提供者
Android碎片/片段
Android Intent過濾器
Android UI佈局
Android LinearLayout
Android RelativeLayout
Android TableLayout
Android AbsoluteLayout
Android FrameLayout
Android ListView
Android GridView
Android UI控件
Android TextView
Android EditText
Android AutoCompleteTextView
Android Button
Android ImageButton
Android CheckBox
Android ToggleButton
Android RadioButton
Android RadioGroup
Android事件處理
Android樣式和主題
Android樣式示例
Android主題示例
Android自定義組件
Android拖放
Android通知
Android基於位置服務
Android發送電子郵件
Android發送短信/SMS
Android撥打電話
發佈Android應用
ArrayAdapter
SimpleCursorAdapter
Android ProgressDialog
Android Spinner
使用活動代碼自定義Android組件
使用佈局文件自定義Android組件
Android自定義組件及屬性
Android Alertdialog(警告對話框)
Android Animation(動畫)實例
Android音頻捕獲(錄音)
Android音頻管理器實例
Android AutoCompleteTextView(自動完成)實例
Android最佳實踐
Android Bluetooth(藍牙)實例
Android Camera(攝像頭)
Android Clipboard(複製/剪貼板)
Android自定義字體
Android數據備份
Android Gestures/手勢
Android圖片效果
Android圖片切換
Android內部存儲
Android JetPlayer實例
Android JSON解析器
Android加載Spinner
Android本地化
Android登錄實例
Android MediaPlayer(多媒體播放)

Android音頻捕獲(錄音)

Android有一個內置的麥克風,通過它可以捕獲音頻和存儲,或在手機進行播放。有很多方法可以做到這一點,但最常見的方法是通過MediaRecorder類。

Android提供MediaRecorder類錄製音頻或視頻。爲了使用MediaRecorder類,首先創建MediaRecorder類的一個實例。其語法如下給出。

MediaRecorder myAudioRecorder = new MediaRecorder();

現在設置源,輸出編碼格式和輸出文件。下面的語法給出。

myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); myAudioRecorder.setOutputFile(outputFile);

指定音頻源和格式以及它的輸出文件之後,我們就可以調用兩種基本方法制備,開始記錄音頻。

myAudioRecorder.prepare(); myAudioRecorder.start();

除了這些方法,還有其他的MediaRecorder類可以更好地控制音頻和視頻錄製列出的方法。

Sr.No

方法及說明

1

setAudioSource()
這個方法規定的音頻源要被記錄

2

setVideoSource()
這個方法規定視頻源將要記錄

3

setOutputFormat()
該方法規定了音頻格式中的音頻將被存儲

4

setAudioEncoder()
此方法指定要使用的音頻編碼器

5

setOutputFile()
該方法配置文件路徑到其中的記錄的音頻將被存儲

6

stop()
此方法停止記錄處理

7

release()
當需要在記錄器實例這種方法應被調用

例子

這個例子提供了MediaRecorder類捕獲音頻的示範,MediaPlayer類來播放錄製的音頻。

爲了試驗這個例子,需要在實際設備上運行此例子。

Steps

描述

1

使用Android Studio創建Android應用程序,並將其命名爲:AudioCapture,創建這個項目,確保目標SDK編譯在Android SDK的最新版本或使用更高級別的API。

2

修改src/MainActivity.java 文件添加AudioCapture代碼

3

如果修改所需的佈局XML文件res/layout/activity_main.xml 添加GUI組件

4

修改 res/values/string.xml文件,並添加必要的字符串組成部分

5

修改 AndroidManifest.xml 添加必要的權限。

6

運行應用程序並選擇運行Android設備,並在其上安裝的應用和驗證結果。

這裏是 src/com.yiibai.audiocapture/MainActivity.java 內容

package com.example.audiocapture; import java.io.File; import java.io.IOException; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private MediaRecorder myAudioRecorder; private String outputFile = null; private Button start,stop,play; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); start = (Button)findViewById(R.id.button1); stop = (Button)findViewById(R.id.button2); play = (Button)findViewById(R.id.button3); stop.setEnabled(false); play.setEnabled(false); outputFile = Environment.getExternalStorageDirectory(). getAbsolutePath() + "/myrecording.3gp";; myAudioRecorder = new MediaRecorder(); myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); myAudioRecorder.setOutputFile(outputFile); } public void start(View view){ try { myAudioRecorder.prepare(); myAudioRecorder.start(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } start.setEnabled(false); stop.setEnabled(true); Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show(); } public void stop(View view){ myAudioRecorder.stop(); myAudioRecorder.release(); myAudioRecorder = null; stop.setEnabled(false); play.setEnabled(true); Toast.makeText(getApplicationContext(), "Audio recorded successfully", Toast.LENGTH_LONG).show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void play(View view) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException{ MediaPlayer m = new MediaPlayer(); m.setDataSource(outputFile); m.prepare(); m.start(); Toast.makeText(getApplicationContext(), "Playing audio", Toast.LENGTH_LONG).show(); } }

這裏是activity_main.xml 的內容

<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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginTop="32dp" android:text="@string/Recording" android:textAppearance="?android:attr/textAppearanceMedium" /> <ImageView android:id="@+id/imageView1" android:layout_width="100dp" android:layout_height="100dp" android:layout_below="@+id/textView1" android:layout_centerHorizontal="true" android:layout_marginTop="37dp" android:scaleType="fitXY" android:src="@android:drawable/presence_audio_online" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/imageView1" android:layout_marginTop="67dp" android:layout_toLeftOf="@+id/imageView1" android:onClick="start" android:text="@string/start" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button1" android:layout_alignBottom="@+id/button1" android:layout_alignRight="@+id/textView1" android:layout_marginRight="40dp" android:onClick="stop" android:text="@string/stop" /> <Button android:id="@+id/button3" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button2" android:layout_centerHorizontal="true" android:onClick="play" android:text="@string/play" />

這裏是 Strings.xml 的內容

<string name="app_name">AudioCapture <string name="action_settings">Settings <string name="hello_world">Hello world! <string name="Recording">Android Audio Recording Application <string name="start">start <string name="stop">stop <string name="play">play

這裏是 AndroidManifest.xml 內容

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yiibai.audiocapture" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.yiibai.audiocapture.MainActivity" android:label="@string/app_name" > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />

讓我們試着運行AndroidCapture應用程序。啓動應用程序之前顯示如下窗口,選擇要運行的Android應用程序的選項。

Anroid

選擇移動設備作爲一個選項,檢看移動設備將顯示如下界面:

Anroid

現在,在默認情況下看到"stop"和"play"按鈕禁用。只需按下"start"按鈕,應用程序將開始錄製音頻。它會顯示以下畫面。

Anroid

現在,只要按下"stop"按鈕,它會保存錄制的音頻外置SD卡。當點擊"stop"按鈕,下面的屏幕會出現。

Anroid

現在,只要按下"play"按鈕,並錄製的音頻只是開始播放設備上。當點擊"play"按鈕,將出現以下消息。

Anroid

代碼下載: http://pan.baidu.com/s/1dD9z6vB