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 | 方法& description |
---|---|
1 | setAudioSource() 此方法指定要录制的音频来源 |
2 | setVideoSource() 此方法指定要录制的视频来源 |
3 | setOutputFormat() 此方法指定要存储音频的音频格式 |
4 | setAudioEncoder() 此方法指定要使用的音频编码器 |
5 | setOutputFile () 此方法c onfigures记录音频存储到的文件的路径 |
6 | stop() 此方法停止录制过程. |
7 | release() 录音机应调用此方法需要实例. |
示例
此示例演示了MediaRecorder类以捕获音频,然后MediaPlayer类播放录制的音频.
要试验此示例,您需要在实际设备上运行它.
步骤 | 描述 |
---|---|
1 | 您将使用Android studio IDE创建一个Android应用程序,并在com.example.sairamkrishna.myapplication包下将其命名为AudioCapture. |
2 | 修改src/MainActivity.java文件以添加AudioCapture代码 |
3 | 修改布局XML文件res/layout/activity_main.xml如果需要,添加任何GUI组件. |
4 | 修改AndroidManifest.xml以添加必要的权限. |
5 | 运行应用程序并选择正在运行的Android设备并在其上安装应用程序并验证结果. |
以下是 src/MainActivity.java的内容
package com.example.sairamkrishna.myapplication;import android.media.MediaPlayer;import android.media.MediaRecorder;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;import java.io.IOException;import java.util.Random;import static android.Manifest.permission.RECORD_AUDIO;import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;import android.support.v4.app.ActivityCompat;import android.content.pm.PackageManager;import android.support.v4.content.ContextCompat;public class MainActivity extends AppCompatActivity { Button buttonStart, buttonStop, buttonPlayLastRecordAudio, buttonStopPlayingRecording ; String AudioSavePathInDevice = null; MediaRecorder mediaRecorder ; Random random ; String RandomAudioFileName = "ABCDEFGHIJKLMNOP"; public static final int RequestPermissionCode = 1; MediaPlayer mediaPlayer ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); buttonStart = (Button) findViewById(R.id.button); buttonStop = (Button) findViewById(R.id.button2); buttonPlayLastRecordAudio = (Button) findViewById(R.id.button3); buttonStopPlayingRecording = (Button)findViewById(R.id.button4); buttonStop.setEnabled(false); buttonPlayLastRecordAudio.setEnabled(false); buttonStopPlayingRecording.setEnabled(false); random = new Random(); buttonStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(checkPermission()) { AudioSavePathInDevice = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + CreateRandomAudioFileName(5) + "AudioRecording.3gp"; MediaRecorderReady(); try { mediaRecorder.prepare(); mediaRecorder.start(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } buttonStart.setEnabled(false); buttonStop.setEnabled(true); Toast.makeText(MainActivity.this, "Recording started", Toast.LENGTH_LONG).show(); } else { requestPermission(); } } }); buttonStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mediaRecorder.stop(); buttonStop.setEnabled(false); buttonPlayLastRecordAudio.setEnabled(true); buttonStart.setEnabled(true); buttonStopPlayingRecording.setEnabled(false); Toast.makeText(MainActivity.this, "Recording Completed", Toast.LENGTH_LONG).show(); } }); buttonPlayLastRecordAudio.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) throws IllegalArgumentException, SecurityException, IllegalStateException { buttonStop.setEnabled(false); buttonStart.setEnabled(false); buttonStopPlayingRecording.setEnabled(true); mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource(AudioSavePathInDevice); mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } mediaPlayer.start(); Toast.makeText(MainActivity.this, "Recording Playing", Toast.LENGTH_LONG).show(); } }); buttonStopPlayingRecording.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { buttonStop.setEnabled(false); buttonStart.setEnabled(true); buttonStopPlayingRecording.setEnabled(false); buttonPlayLastRecordAudio.setEnabled(true); if(mediaPlayer != null){ mediaPlayer.stop(); mediaPlayer.release(); MediaRecorderReady(); } } }); } public void MediaRecorderReady(){ mediaRecorder=new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); mediaRecorder.setOutputFile(AudioSavePathInDevice); } public String CreateRandomAudioFileName(int string){ StringBuilder stringBuilder = new StringBuilder( string ); int i = 0 ; while(i < string ) { stringBuilder.append(RandomAudioFileName. charAt(random.nextInt(RandomAudioFileName.length()))); i++ ; } return stringBuilder.toString(); } private void requestPermission() { ActivityCompat.requestPermissions(MainActivity.this, new String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, RequestPermissionCode); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case RequestPermissionCode: if (grantResults.length> 0) { boolean StoragePermission = grantResults[0] == PackageManager.PERMISSION_GRANTED; boolean RecordPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED; if (StoragePermission && RecordPermission) { Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show(); } else { Toast.makeText(MainActivity.this,"Permission Denied",Toast.LENGTH_LONG).show(); } } break; } } public boolean checkPermission() { int result = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE); int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), RECORD_AUDIO); return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED; }}
以下是 activity_main.xml 的内容
在下面的代码中 abc 表示it1352的标识
以下是 Strings.xml的内容
My Application
以下是 AndroidManifest.xml的内容
让我们尝试运行您的应用程序.我假设您已将实际的Android移动设备与计算机相关联.要从Android工作室运行应用程序,请打开项目的一个活动文件,然后单击运行 icon从工具栏中.在开始申请之前,Android studio将显示以下图像.
现在默认情况下,您将看到停止和播放按钮禁用.只需按下录制按钮,您的应用程序就会开始录制音频.它将显示以下屏幕.
现在只需按停止按钮,它将录制的音频保存到外部SD卡.单击停止按钮时,将出现以下屏幕.
现在只需按下播放按钮,录制的音频就会开始在设备上播放.单击播放按钮时会出现以下消息.