【问题标题】:read stream byte from FileDescriptor从 FileDescriptor 读取流字节
【发布时间】:2018-10-29 09:55:35
【问题描述】:

我是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 studio 向我显示消息并说:“应用程序正在运行”,我不得不停止它....

任何人都可以帮助我并告诉我代码有什么问题吗?

【问题讨论】:

    标签: android stream


    【解决方案1】:

    你可以使用这个功能available()

    while ((inputStream.read(data, 0, data.length))  != -1) {
         read = inputStream.read(data, 0, data.length);
         byteArrayOutputStream.write(data, 0, read);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 2021-04-03
      • 2011-12-21
      • 2011-01-18
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多