首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从FileDescriptor读取流字节

从FileDescriptor读取流字节
EN

Stack Overflow用户
提问于 2018-10-29 09:55:35
回答 1查看 1.2K关注 0票数 1

我是android和java的初学者。

但是,我希望使用MediaRecorder记录语音,并将数据记录为byte[],我编写了以下代码:

代码语言:javascript
复制
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;

我有一个很大的问题,我调试代码,当我到了这一行:

代码语言:javascript
复制
while ((read = inputStream.read(data, 0, data.length))  != -1) {
         byteArrayOutputStream.write(data, 0, read);
    }

过了几圈之后,android工作室给我看了一条消息,说:“应用程序正在运行”,我不得不阻止它.

有人能帮我告诉我密码出了什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-03 08:26:50

您可以使用此函数可得()

代码语言:javascript
复制
while ((inputStream.read(data, 0, data.length))  != -1) {
     read = inputStream.read(data, 0, data.length);
     byteArrayOutputStream.write(data, 0, read);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53042877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档