Android Audiorecord实现步骤
1. 简介
在Android开发中,使用AudioRecord可以实现录制音频功能。AudioRecord是一个Android提供的可以实时录制音频的类,可以通过设置参数来控制录制的音频格式、采样率、声道等。
2. 实现步骤
下面是实现"android audiorecord简书"的步骤:
journey
title Android Audiorecord实现步骤
section 1. 检查权限
section 2. 初始化AudioRecord
section 3. 开始录制音频
section 4. 读取录制的音频数据
section 5. 停止录制音频
section 6. 释放资源
2.1 检查权限
在AndroidManifest.xml中添加录制音频的权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
2.2 初始化AudioRecord
在Java代码中,我们需要创建一个AudioRecord对象来进行音频录制。需要设置的参数有:采样率、声道、音频格式、缓冲区大小等。
int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
AudioRecord audioRecord = new AudioRecord(audioSource, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes);
参数解释:
sampleRateInHz
:采样率,例如44100Hz表示每秒采样44100次。channelConfig
:声道配置,例如AudioFormat.CHANNEL_IN_MONO表示单声道。audioFormat
:音频格式,例如AudioFormat.ENCODING_PCM_16BIT表示16位PCM格式。audioSource
:音频源,例如MediaRecorder.AudioSource.MIC表示麦克风。
2.3 开始录制音频
调用AudioRecord的startRecording()
方法开始录制音频:
audioRecord.startRecording();
2.4 读取录制的音频数据
创建一个字节数组用于存储读取到的音频数据,然后调用AudioRecord的read()
方法读取数据:
byte[] buffer = new byte[bufferSizeInBytes];
int bytesRead = audioRecord.read(buffer, 0, bufferSizeInBytes);
2.5 停止录制音频
调用AudioRecord的stop()
方法停止录制音频:
audioRecord.stop();
2.6 释放资源
录制完成后,需要释放AudioRecord对象和相关资源:
audioRecord.release();
3. 示例代码
下面是一个完整的示例代码,实现了录制音频功能:
import android.Manifest;
import android.content.pm.PackageManager;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_CODE = 1;
private Button recordButton;
private AudioRecord audioRecord;
private boolean isRecording = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recordButton = findViewById(R.id.record_button);
recordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isRecording) {
stopRecording();
} else {
startRecording();
}
}
});
requestPermission();
}
private void requestPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO},
PERMISSION_REQUEST_CODE);
}
}
private void startRecording() {
int sampleRateInHz = 44100;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRateInHz, channelConfig,
audioFormat, bufferSizeInBytes);
audioRecord.startRecording();
isRecording = true;
new Thread(new Runnable() {
@Override
public void run() {
writeAudioDataToFile();
}
}).start();
recordButton.setText