我是android和java的初学者。
但是,我希望使用MediaRecorder记录语音,并将数据记录为byte[],我编写了以下代码:
ParcelFileDescriptor[] fileDescriptors = ParcelFileDescriptor.createPipe();
ParcelFileDescriptor readFD = fileDescriptors[0];
ParcelFileDescriptor writeFD = fileDescriptors[1];
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(writeFD.getFileDescriptor());
recorder.setMaxDuration(6000);
recorder.prepare();
recorder.start();
recorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
@Override
public void onError(MediaRecorder mediaRecorder, int i, int i1) {
mediaRecorder.stop();
Log.d("voice", "onError");
mediaRecorder.release();
}
});
recorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
@Override
public void onInfo(MediaRecorder mediaRecorder, int i, int i1) {
mediaRecorder.stop();
Log.d("voice", "onInfo");
mediaRecorder.release();
}
});
InputStream inputStream = new ParcelFileDescriptor.AutoCloseInputStream(readFD);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int read = -1;
byte[] data = new byte[4000];
while ((read = inputStream.read(data, 0, data.length)) != -1) {
byteArrayOutputStream.write(data, 0, read);
}
byte[] byteResult = byteArrayOutputStream.toByteArray();
byteArrayOutputStream.flush();
byteArrayOutputStream.close();
return byteResult;我有一个很大的问题,我调试代码,当我到了这一行:
while ((read = inputStream.read(data, 0, data.length)) != -1) {
byteArrayOutputStream.write(data, 0, read);
}过了几圈之后,android工作室给我看了一条消息,说:“应用程序正在运行”,我不得不阻止它.
有人能帮我告诉我密码出了什么问题吗?
发布于 2018-11-03 08:26:50
您可以使用此函数可得()
while ((inputStream.read(data, 0, data.length)) != -1) {
read = inputStream.read(data, 0, data.length);
byteArrayOutputStream.write(data, 0, read);
}https://stackoverflow.com/questions/53042877
复制相似问题