чтение потокового байта из FileDescriptor - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в Android и Java.

Однако я хочу использовать MediaRecorder для записи голоса и получать данные, записанные в байтах [], я пишу следующий код:

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);
    }

Через несколько кругов андроид студия покажет мне сообщение и скажет: "Приложение работает", и мне пришлось его остановить ....

Кто-нибудь может мне помочь и сказать мне, что код неправильный?

1 Ответ

0 голосов
/ 03 ноября 2018

Вы можете использовать эту функцию доступно ()

while ((inputStream.read(data, 0, data.length))  != -1) {
     read = inputStream.read(data, 0, data.length);
     byteArrayOutputStream.write(data, 0, read);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...