在用于录制音频或视频的Android中,有一个名为MediaRecorder的内置类。 Android中的此类有助于轻松录制视频和音频文件。 Android多媒体框架为捕获和编码常见的音频和视频格式提供了内置支持。在android中,用于录制音频,我们将使用设备麦克风以及MediaRecorder类,并且在录制视频时,我们将使用用户的设备Camera和MediaRecorder类。现在,在本文中,我们将通过一个示例来介绍Android中音频记录器的实现。
MediaRecorder类的重要方法
Method |
Description |
---|---|
setAudioSource() | This method will specify the source of the audio to be recorded. |
setAudioEncoder() | This method is used to specify the audio encoder. |
setOutputFormat() | This method is used to specify the output format of our audio. |
setOutputFile() | This method is used to specify the path of recorded audio files that are to be stored. |
stop() | This method is used to stop the recording process. |
start() | This method is used to start the recording process. |
release() | This method is used to release the resource that is associated with the Media recorder class. |
例子
现在,我们正在创建一个简单的音频记录器应用程序,在该应用程序中,我们将记录用户设备麦克风中的音频,然后将该音频记录存储在用户设备中。我们还将播放此保存的录音。下面给出了一个示例GIF,以了解我们将在本文中做些什么。注意,我们将使用Java语言实现该项目。
分步实施
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Java作为编程语言。
步骤2:在AndroidManifest.xml文件中添加权限
在AndroidManifest.xml文件中添加以下行。
XML
XML
#0F9D58
#0F9D58
#0F9D58
#FF03DAC5
#FF018786
#FF000000
#FFFFFFFF
#A39696
XML
GFG APP
Toggle Flash
Settings
Scanned Data
Audio Recorder
Start Recording
Stop Recording
Play Recording
Stop Playing
Status
XML
Java
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.IOException;
import static android.Manifest.permission.RECORD_AUDIO;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
public class MainActivity extends AppCompatActivity {
// Intializing all variables..
private TextView startTV, stopTV, playTV, stopplayTV, statusTV;
// creating a variable for medi recorder object class.
private MediaRecorder mRecorder;
// creating a variable for mediaplayer class
private MediaPlayer mPlayer;
// string variable is created for storing a file name
private static String mFileName = null;
// constant for storing audio permission
public static final int REQUEST_AUDIO_PERMISSION_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialize all variables with their layout items.
statusTV = findViewById(R.id.idTVstatus);
startTV = findViewById(R.id.btnRecord);
stopTV = findViewById(R.id.btnStop);
playTV = findViewById(R.id.btnPlay);
stopplayTV = findViewById(R.id.btnStopPlay);
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
playTV.setBackgroundColor(getResources().getColor(R.color.gray));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// start recording method will
// start the recording of audio.
startRecording();
}
});
stopTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// pause Recording method will
// pause the recording of audio.
pauseRecording();
}
});
playTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// play audio method will play
// the audio which we have recorded
playAudio();
}
});
stopplayTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// pause play method will
// pause the play of audio
pausePlaying();
}
});
}
private void startRecording() {
// check permission method is used to check
// that the user has granted permission
// to record nd store the audio.
if (CheckPermissions()) {
// setbackgroundcolor method will change
// the background color of text view.
stopTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
startTV.setBackgroundColor(getResources().getColor(R.color.gray));
playTV.setBackgroundColor(getResources().getColor(R.color.gray));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
// we are here initializing our filename variable
// with the path of the recorded audio file.
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/AudioRecording.3gp";
// below method is used to initialize
// the media recorder clss
mRecorder = new MediaRecorder();
// below method is used to set the audio
// source which we are using a mic.
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// below method is used to set
// the output format of the audio.
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// below method is used to set the
// audio encoder for our recorded audio.
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
// below method is used to set the
// output file location for our recorded audio
mRecorder.setOutputFile(mFileName);
try {
// below mwthod will prepare
// our audio recorder class
mRecorder.prepare();
} catch (IOException e) {
Log.e("TAG", "prepare() failed");
}
// start method will start
// the audio recording.
mRecorder.start();
statusTV.setText("Recording Started");
} else {
// if audio recording permissions are
// not granted by user below method will
// ask for runtime permission for mic and storage.
RequestPermissions();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// this method is called when user will
// grant the permission for audio recording.
switch (requestCode) {
case REQUEST_AUDIO_PERMISSION_CODE:
if (grantResults.length > 0) {
boolean permissionToRecord = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean permissionToStore = grantResults[1] == PackageManager.PERMISSION_GRANTED;
if (permissionToRecord && permissionToStore) {
Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_LONG).show();
}
}
break;
}
}
public boolean CheckPermissions() {
// this method is used to check permission
int result = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE);
int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), RECORD_AUDIO);
return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED;
}
private void RequestPermissions() {
// this method is used to request the
// permission for audio recording and storage.
ActivityCompat.requestPermissions(MainActivity.this, new String[]{RECORD_AUDIO, WRITE_EXTERNAL_STORAGE}, REQUEST_AUDIO_PERMISSION_CODE);
}
public void playAudio() {
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
playTV.setBackgroundColor(getResources().getColor(R.color.gray));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
// for playing our recorded audio
// we are using media player class.
mPlayer = new MediaPlayer();
try {
// below method is used to set the
// data source which will be our file name
mPlayer.setDataSource(mFileName);
// below method will prepare our media player
mPlayer.prepare();
// below method will start our media player.
mPlayer.start();
statusTV.setText("Recording Started Playing");
} catch (IOException e) {
Log.e("TAG", "prepare() failed");
}
}
public void pauseRecording() {
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
playTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
// below method will stop
// the audio recording.
mRecorder.stop();
// below method will release
// the media recorder class.
mRecorder.release();
mRecorder = null;
statusTV.setText("Recording Stopped");
}
public void pausePlaying() {
// this method will release the media player
// class and pause the playing of our recorded audio.
mPlayer.release();
mPlayer = null;
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
playTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
statusTV.setText("Recording Play Stopped");
}
}
步骤3:修改colors.xml和.xml字符串文件
以下是colors.xml文件的代码。
XML格式
#0F9D58
#0F9D58
#0F9D58
#FF03DAC5
#FF018786
#FF000000
#FFFFFFFF
#A39696
以下是字符串.xml文件的代码。
XML格式
GFG APP
Toggle Flash
Settings
Scanned Data
Audio Recorder
Start Recording
Stop Recording
Play Recording
Stop Playing
Status
步骤4:使用activity_main.xml文件
导航到应用程序> res>布局> activity_main.xml 。以下是activity_main.xml文件的代码。在代码内部添加了注释,以更详细地了解代码。
XML格式
步骤5:使用MainActivity。 Java文件
导航到应用程序> Java >您的应用程序的程序包名称> MainActivity。 Java的。下面是MainActivity的代码。 Java文件。在代码内部添加了注释,以更详细地了解代码。
Java
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.IOException;
import static android.Manifest.permission.RECORD_AUDIO;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
public class MainActivity extends AppCompatActivity {
// Intializing all variables..
private TextView startTV, stopTV, playTV, stopplayTV, statusTV;
// creating a variable for medi recorder object class.
private MediaRecorder mRecorder;
// creating a variable for mediaplayer class
private MediaPlayer mPlayer;
// string variable is created for storing a file name
private static String mFileName = null;
// constant for storing audio permission
public static final int REQUEST_AUDIO_PERMISSION_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialize all variables with their layout items.
statusTV = findViewById(R.id.idTVstatus);
startTV = findViewById(R.id.btnRecord);
stopTV = findViewById(R.id.btnStop);
playTV = findViewById(R.id.btnPlay);
stopplayTV = findViewById(R.id.btnStopPlay);
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
playTV.setBackgroundColor(getResources().getColor(R.color.gray));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// start recording method will
// start the recording of audio.
startRecording();
}
});
stopTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// pause Recording method will
// pause the recording of audio.
pauseRecording();
}
});
playTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// play audio method will play
// the audio which we have recorded
playAudio();
}
});
stopplayTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// pause play method will
// pause the play of audio
pausePlaying();
}
});
}
private void startRecording() {
// check permission method is used to check
// that the user has granted permission
// to record nd store the audio.
if (CheckPermissions()) {
// setbackgroundcolor method will change
// the background color of text view.
stopTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
startTV.setBackgroundColor(getResources().getColor(R.color.gray));
playTV.setBackgroundColor(getResources().getColor(R.color.gray));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
// we are here initializing our filename variable
// with the path of the recorded audio file.
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/AudioRecording.3gp";
// below method is used to initialize
// the media recorder clss
mRecorder = new MediaRecorder();
// below method is used to set the audio
// source which we are using a mic.
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// below method is used to set
// the output format of the audio.
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// below method is used to set the
// audio encoder for our recorded audio.
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
// below method is used to set the
// output file location for our recorded audio
mRecorder.setOutputFile(mFileName);
try {
// below mwthod will prepare
// our audio recorder class
mRecorder.prepare();
} catch (IOException e) {
Log.e("TAG", "prepare() failed");
}
// start method will start
// the audio recording.
mRecorder.start();
statusTV.setText("Recording Started");
} else {
// if audio recording permissions are
// not granted by user below method will
// ask for runtime permission for mic and storage.
RequestPermissions();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// this method is called when user will
// grant the permission for audio recording.
switch (requestCode) {
case REQUEST_AUDIO_PERMISSION_CODE:
if (grantResults.length > 0) {
boolean permissionToRecord = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean permissionToStore = grantResults[1] == PackageManager.PERMISSION_GRANTED;
if (permissionToRecord && permissionToStore) {
Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_LONG).show();
}
}
break;
}
}
public boolean CheckPermissions() {
// this method is used to check permission
int result = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE);
int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), RECORD_AUDIO);
return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED;
}
private void RequestPermissions() {
// this method is used to request the
// permission for audio recording and storage.
ActivityCompat.requestPermissions(MainActivity.this, new String[]{RECORD_AUDIO, WRITE_EXTERNAL_STORAGE}, REQUEST_AUDIO_PERMISSION_CODE);
}
public void playAudio() {
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
playTV.setBackgroundColor(getResources().getColor(R.color.gray));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
// for playing our recorded audio
// we are using media player class.
mPlayer = new MediaPlayer();
try {
// below method is used to set the
// data source which will be our file name
mPlayer.setDataSource(mFileName);
// below method will prepare our media player
mPlayer.prepare();
// below method will start our media player.
mPlayer.start();
statusTV.setText("Recording Started Playing");
} catch (IOException e) {
Log.e("TAG", "prepare() failed");
}
}
public void pauseRecording() {
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
playTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
// below method will stop
// the audio recording.
mRecorder.stop();
// below method will release
// the media recorder class.
mRecorder.release();
mRecorder = null;
statusTV.setText("Recording Stopped");
}
public void pausePlaying() {
// this method will release the media player
// class and pause the playing of our recorded audio.
mPlayer.release();
mPlayer = null;
stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
playTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
statusTV.setText("Recording Play Stopped");
}
}
所有可绘制对象都存储在可绘制文件夹中。导航到应用程序> res> drawable文件夹以查看所有drawable。现在,在物理设备上运行该应用程序以对其进行测试。
输出:在物理设备上运行
该项目的GitHub链接: https : //github.com/ChaitanyaMunje/QR_Code_Scanner/tree/Audio_recorder