Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android音頻捕獲(錄音)

Android音頻捕獲(錄音)

編輯: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" /> </RelativeLayout>

這裡是 Strings.xml 的內容

<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">AudioCapture</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="Recording">Android Audio Recording Application</string> <string name="start">start</string> <string name="stop">stop</string> <string name="play">play</string> </resources>

這裡是 AndroidManifest.xml 內容

<?xml version="1.0" encoding="utf-8"?> <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" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

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

Anroid Capture Tutorial

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

Anroid Capture Tutorial

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

Anroid Capture Tutorial

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

Anroid Capture Tutorial

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

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