问题描述: 在Android中使用AudioRecord录制音频,但无法将录制的音频数据写入为wav文件。
解决方法: 以下是一个示例代码,演示了如何使用AudioRecord录制音频,并将其写入为wav文件。
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class AudioRecorder {
private static final int SAMPLE_RATE = 44100;
private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO;
private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
private static final String OUTPUT_FILE = "/sdcard/record.wav";
private AudioRecord audioRecord;
private boolean isRecording = false;
public void startRecording() {
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT,
AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT));
audioRecord.startRecording();
isRecording = true;
new Thread(new Runnable() {
@Override
public void run() {
writeAudioDataToFile();
}
}).start();
}
private void writeAudioDataToFile() {
byte[] data = new byte[AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT)];
FileOutputStream os = null;
try {
os = new FileOutputStream(new File(OUTPUT_FILE));
DataOutputStream dos = new DataOutputStream(os);
while (isRecording) {
int bytesRead = audioRecord.read(data, 0, data.length);
if (bytesRead != AudioRecord.ERROR_INVALID_OPERATION) {
dos.write(data, 0, bytesRead);
}
}
dos.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void stopRecording() {
isRecording = false;
if (audioRecord != null) {
audioRecord.stop();
audioRecord.release();
audioRecord = null;
}
}
}
在上面的示例中,我们创建了一个AudioRecord对象,指定了音频源,采样率,声道配置和编码格式等参数。然后,我们启动录制,将录制的音频数据写入到指定的文件中。在写入数据时,我们使用了DataOutputStream来写入字节数据。
要开始录制音频,可以调用startRecording()方法。停止录制时,可以调用stopRecording()方法。
请确保已经在AndroidManifest.xml文件中添加了录制音频和写入外部存储的权限:
注意:此代码示例仅提供了基本的录制和写入wav文件的功能。您可能需要根据自己的需求进行适当的修改和优化。
上一篇:Android-Jacoco-无法生成测试和androidTest的合并报告
下一篇:Android-Java HTTPCLIENT使用Content-Disposition上传图片的HTTP参数发送。