Audio Capture trong Android
Android có một Microphone được xây dựng sẵn, thông qua đó bạn 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.
Stt | Phương thức & Miêu tả |
---|---|
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
Sau đây là nội dung của Strings.xml
My Application Hello world! Settings
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:
Bây giờ, nhấn nút STOP và nó sẽ lưu phần audio đã được ghi âm vào thẻ sd ngoại vi. Khi bạn nhấn nút STOP, màn hình sẽ hiển thị:
Bây giờ, nhấn nút PLAY và phần audio đã được ghi âm sẽ bắt đầu play trên thiết bị. Thông báo sau xuất hiện khi bạn nhấn nút PLAY.
Bài học Angular phổ biến tại hoconline.club: