开发手册 欢迎您!
软件开发者资料库

Android - 音频捕获

Android音频捕捉 - 学习Android编程以及如何从环境设置,应用程序组件,活动生命周期,服务生命周期,应用程序架构,发布应用程序,调试应用程序,处理事件,布局,菜单,用户界面控件开始开发Android手机和ipad应用程序,样式和主题,处理轮换,字体管理,发送电子邮件,数据存储,管理媒体,发送短信,电话。

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工作室运行应用程序,请打开项目的一个活动文件,然后单击运行Eclipse Run Icon icon从工具栏中.在开始申请之前,Android studio将显示以下图像.

现在默认情况下,您将看到停止和播放按钮禁用.只需按下录制按钮,您的应用程序就会开始录制音频.它将显示以下屏幕.

音频录制

现在只需按停止按钮,它将录制的音频保存到外部SD卡.单击停止按钮时,将出现以下屏幕.

Android停止按钮

现在只需按下播放按钮,录制的音频就会开始在设备上播放.单击播放按钮时会出现以下消息.

Android播放按钮