преобразование аудио файла в bytearray: нет такого файла или каталога - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь преобразовать аудиофайл в байтовый массив. где аудиофайл извлекается через вложенный файл, поэтому его в Uri

ByteArrayOutputStream baos = new ByteArrayOutputStream();
    FileInputStream fis;
    try {

        //FileInputStream = reading the file
          fis = new FileInputStream(new File(audioFxUri.getPath()));
          byte[] buf = new byte[1024];
          int n;
          while (-1 != (n = fis.read(buf)))
                 baos.write(buf, 0, n);
     } catch (Exception e) {
         e.printStackTrace();
     }

     byte[] bbytes = baos.toByteArray();

Я следовал этому коду из этого , но как только я побежал. Это дало мне ошибку

W/System.err: java.io.FileNotFoundException: /external/audio/media/646818: open failed: ENOENT (No such file or directory)

Я также пытался воспроизвести его с MediaPlayer и установить Uri в качестве источника

  MediaPlayer player = new MediaPlayer();
  player.setAudioStreamType(AudioManager.STREAM_MUSIC);
  player.setDataSource(AttachAudio.this,audioFxUri.toString());
  player.prepare();
  player.start();

чтобы убедиться, что аудиофайл работает или нет. Ps. это сработало.

Что-то не так, что я делаю, почему он не конвертируется в байтовый массив?

1 Ответ

0 голосов
/ 31 октября 2018

Файл Uri, который у вас есть /external/audio/media/646818, не является фактическим путем к файлу, поэтому он дает FileNotFoundException.

Вам необходимо получить абсолютный путь из URI и затем прочитать файл соответствующим образом.

Вы можете использовать ниже код:

public String getRealPathFromURI(Uri contentUri) 
{
     String[] proj = { MediaStore.Audio.Media.DATA };
     Cursor cursor = managedQuery(contentUri, proj, null, null, null);
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
     cursor.moveToFirst();
     return cursor.getString(column_index);
}

или См. это или это ТАКИЕ ссылки для других опций / методов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...