Android có một Microphone được xây dựng sẵn, thông qua đó người lập trình android có thể nắm bắt âm thanh, lưu giữ nó hoặc play nó trên điện thoại. Có nhiều cách để thực hiện điều này nhưng cách phổ biến nhất là thông qua lớp MediaRecorder.

Android cung cấp lớp MediaRecorder để ghi âm audio và video. Để sử dụng lớp MediaRecorder này, đầu tiên bạn tạo một instance của lớp MediaRecorder. Cú pháp như sau:MediaRecorder myAudioRecorder = new MediaRecorder();

Bây giờ bạn sẽ thiết lập source, định dạng output, định dạng encoding và output file. Cú pháp của chúng là:
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setOutputFile(outputFile);

Sau khi xác định chúng, chúng ta có thể gọi hai phương thức cơ bản để chuẩn bị và bắt đầu ghi âm audio:

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

Ngoài các phương thức này, lớp MediaRecorder còn có một số phương thức khác cung cấp cho bạn nhiều sự điều khiển hơn tới việc thu âm audio và video.

1 setAudioSource()
Phương thức này xác định source của audio để được thu âm
2 setVideoSource()
Phương thức này xác định source của video để được thu âm

3 setOutputFormat()
Phương thức này xác định định dạng audio để được lưu giữ

4 setAudioEncoder()
Phương thức này xác định bộ mã hóa audio để được sử dụng

5 setOutputFile()
Phương thức này cấu hình path tới file trong đó audio được lưu giữ

6 stop()
Phương thức này dừng tiến trình thu âm

7 release()
Phương thức này nên được gọi khi cần đến recoder

Ví dụ

Ứng dụng Android dưới đây sử dụng lớp MediaRecorder để tạo ứng dụng Audio Capture và sử dụng lớp MediaPlayer để play audio.

Sau đây là nội dung của src/MainActivity.java
package com.example.sairamkrishna.myapplication;
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.IOException;
public class MainActivity extends Activity {
  Button play,stop,record;
  private MediaRecorder myAudioRecorder;
  private String outputFile = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
   
     play=(Button)findViewById(R.id.button3);
     stop=(Button)findViewById(R.id.button2);
     record=(Button)findViewById(R.id.button);
   
     stop.setEnabled(false);
     play.setEnabled(false);
     outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";;
   
     myAudioRecorder=new MediaRecorder();
     myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
     myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
     myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
     myAudioRecorder.setOutputFile(outputFile);
   
     record.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           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();
           }
         
           record.setEnabled(false);
           stop.setEnabled(true);
         
           Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
        }
     });
   
     stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           myAudioRecorder.stop();
           myAudioRecorder.release();
           myAudioRecorder  = null;
         
           stop.setEnabled(false);
           play.setEnabled(true);
         
           Toast.makeText(getApplicationContext(), "Audio recorded successfully",Toast.LENGTH_LONG).show();
        }
     });
   
     play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) throws IllegalArgumentException,SecurityException,IllegalStateException {
           MediaPlayer m = new MediaPlayer();
         
           try {
              m.setDataSource(outputFile);
           }
         
           catch (IOException e) {
              e.printStackTrace();
           }
         
           try {
              m.prepare();
           }
         
           catch (IOException e) {
              e.printStackTrace();
           }
         
           m.start();
           Toast.makeText(getApplicationContext(), "Playing audio", 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.menu_main, menu);
     return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
     // Handle action bar item clicks here. The action bar will
     // automatically handle clicks on the Home/Up button, so long
     // as you specify a parent activity in AndroidManifest.xml.
   
     int id = item.getItemId();
   
     //noinspection SimplifiableIfStatement
     if (id == R.id.action_settings) {
        return true;
     }
     return super.onOptionsItemSelected(item);
  }
}

Sau đây là nội dung của 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:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  android:paddingBottom="@dimen/activity_vertical_margin"
  tools:context=".MainActivity">

 
<TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Android Audio Recording"
     android:id="@+id/textView"
     android:textSize="30dp"
     android:layout_alignParentTop="true"
     android:layout_alignParentRight="true"
     android:layout_alignParentEnd="true" />
   
  <TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Tutorialspoint"
     android:id="@+id/textView2"
     android:textColor="#ff3eff0f"
     android:textSize="35dp"
     android:layout_below="@+id/textView"
     android:layout_centerHorizontal="true" />
   
  <ImageView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/imageView"
     android:src="@drawable/logo"
     android:layout_below="@+id/textView2"
     android:layout_alignLeft="@+id/textView2"
     android:layout_alignStart="@+id/textView2"
     android:layout_alignRight="@+id/textView2"
     android:layout_alignEnd="@+id/textView2" />
   
  <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Record"
     android:id="@+id/button"
     android:layout_below="@+id/imageView"
     android:layout_alignParentLeft="true"
     android:layout_alignParentStart="true"
     android:layout_marginTop="59dp" />
   
  <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Stop"
     android:id="@+id/button2"
     android:layout_alignTop="@+id/button"
     android:layout_centerHorizontal="true" />
   
  <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="play"
     android:id="@+id/button3"
     android:layout_alignTop="@+id/button2"
     android:layout_alignRight="@+id/textView"
     android:layout_alignEnd="@+id/textView" />
</RelativeLayout>
<resources>
  <string name="app_name">My Application</string>
  <string name="hello_world">Hello world!</string>
  <string name="action_settings">Settings</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.audiocapture"
  android:versionCode="1"
  android:versionName="1.0" >

  <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.example.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>



Sau đây là nội dung của Strings.xml
Sau đây là nội dung của AndroidManifest.xml
Cuối cùng, bạn chạy ứng dụng Android vừa tạo ở trên.
Bây giờ, theo mặc định bạn sẽ thấy các nút STOP và PLAY là disable. Nhấn nút RECORD và ứng dụng bắt đầu thu âm. Nó sẽ hiển thị màn hình sau:

0 nhận xét:

Đăng nhận xét

 
Top