Android Audio Recorder



  • 1. Giới thiệu

    • Android SDK cung cấp khá nhiều api hữu dụng để khai thác các chức năng trên smartphone, bao gồm cả ghi âm và phát audio. Trong bài này mình sẽ hướng dẫn tạo 1 ứng dụng đơn giản thực hiện ghi âm và play audio sử dụng MediaRecorder API của Android SDK

    2. Xây dựng giao diện đơn giản cho ứng dụng

    • Trước tiên ta sẽ xây dựng giao diện đơn giản cho ứng dụng Audio Recorder. Giao diện của chúng ta sẽ có 3 button thực hiện các chức năng: bắt đầu ghi âm, dừng ghi âm, play audio
    activity_main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <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">
        <ImageView
            android:layout_width="250dp"
            android:layout_height="250dp"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:src="@drawable/logo_ssaurel"
            android:id="@+id/logo"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Record"
            android:textSize="20sp"
            android:id="@+id/record"
            android:layout_below="@id/logo"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="15dp"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Stop"
            android:textSize="20sp"
            android:id="@+id/stop"
            android:layout_below="@id/record"
            android:layout_marginTop="10dp"
            android:layout_centerHorizontal="true"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Play"
            android:textSize="20sp"
            android:id="@+id/play"
            android:layout_below="@id/stop"
            android:layout_marginTop="10dp"
            android:layout_centerHorizontal="true"
            />
    </RelativeLayout>
    

    3. Ghi âm và play audio

    • Tiếp theo ta sẽ viết 1 đoạn java code thực hiện các việc trên
    • Đầu tiên ta sẽ thêm listener cho button để bắt sự kiện của user khi click vào button
    MainActivity.java
    public class MainActivity extends AppCompatActivity {
        private Button play, stop, record;
        private MediaRecorder myAudioRecorder;
        private String outputFile;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            play = (Button) findViewById(R.id.play);
            stop = (Button) findViewById(R.id.stop);
            record = (Button) findViewById(R.id.record);
            stop.setEnabled(false);
            play.setEnabled(false);
            // ...
       }
       
    }
    
    • Ta cần phải disable button stop và play khi activity khởi tạo thông qua method setEnable() với parameter false. Tiếp theo ta cần đường link đến file sẽ lưu audio khi ta thực hiện xong ghi âm
    String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";
    
    • Tiếp theo ta cần configure đối tượng MediaRecorder để thực hiện ghi âm:
    MediaRecorder myAudioRecorder = new MediaRecorder();
    myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    myAudioRecorder.setOutputFile(outputFile);
    
    • Tiếp theo ta sẽ bắt đầu ghi âm khi người dùng click record button
    record.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    myAudioRecorder.prepare();
                    myAudioRecorder.start();
                } catch (IllegalStateException ise) {
                    // make something ...
                } catch (IOException ioe) {
                    // make something
                }
                record.setEnabled(false);
                stop.setEnabled(true);
                Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
            }
        });
    
    • Ta cần gọi phương thức prepare() trước khi gọi phương thức start() để băt đầu ghi âm
    • Ta thực hiện tương tự với stop button
    stop.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              myAudioRecorder.stop();
              myAudioRecorder.release();
              myAudioRecorder = null;
              record.setEnabled(true);
              stop.setEnabled(false);
              play.setEnabled(true);
              Toast.makeText(getApplicationContext(), "Audio Recorder stopped", Toast.LENGTH_LONG).show();
          }
      });
    
    • Ta thực hiện stop ghi âm bởi phương thức stop(), sau đó phải thực hiện release()
    • Bây giờ ta đã có file audio được ghi âm và lưu tại path ta tạo trước đó, và ta có thể play audio từ file ta vừa tạo
    play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MediaPlayer mediaPlayer = new MediaPlayer();
            try {
                mediaPlayer.setDataSource(outputFile);
                mediaPlayer.prepare();
                mediaPlayer.start();
                Toast.makeText(getApplicationContext(), "Playing Audio", Toast.LENGTH_LONG).show();
            } catch (Exception e) {
                // make something
            }
        }
    });
    
    • Để play audio file ta sẽ sử dụng MediaPlayer API. Sử dụng phương thức setDataSource() để chỉ định file sẽ play, trước khi start play ta cần gọi phương thức prepare().
    • Code hoàn chỉnh cho file MainActivity.java
    MainActivity.java
    import android.media.MediaPlayer;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Environment;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    import java.io.IOException;
    
    public class MainActivity extends AppCompatActivity {
        private Button play, stop, record;
        private MediaRecorder myAudioRecorder;
        private String outputFile;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            play = (Button) findViewById(R.id.play);
            stop = (Button) findViewById(R.id.stop);
            record = (Button) findViewById(R.id.record);
            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 ise) {
                        // make something ...
                    } catch (IOException ioe) {
                        // make something
                    }
                    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;
                    record.setEnabled(true);
                    stop.setEnabled(false);
                    play.setEnabled(true);
                    Toast.makeText(getApplicationContext(), "Audio Recorder successfully", Toast.LENGTH_LONG).show();
                }
            });
            
            play.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    MediaPlayer mediaPlayer = new MediaPlayer();
                    try {
                        mediaPlayer.setDataSource(outputFile);
                        mediaPlayer.prepare();
                        mediaPlayer.start();
                        Toast.makeText(getApplicationContext(), "Playing Audio", Toast.LENGTH_LONG).show();
                    } catch (Exception e) {
                        // make something
                    }
                }
            });
        }
    }
    

    source
    Nguồn: Viblo


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới LaptrinhX, vui lòng đợi một lúc để chúng tôi thử kết nối lại.