Как создать файл аудио с помощью байтового массива в Android Studio? - PullRequest
1 голос
/ 13 июня 2019

У меня есть функция, которая получает байтовый массив и сохраняет его в «file.mp3», «file.mp3» сохраняется в мобильном телефоне, но не может быть открыт.

Я использовал MediaPlayer после этого поста Android - Воспроизведение mp3 из байта [] , но это убивает приложение, делая это таким образом, вместо временного создания файла, я сохраняю его непосредственно в телефоне, но «file.mp3» не работает.

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

У меня есть эта функция:

@GET("tts/talk/{text}")
Call<ResponseBody> sendText(@Path("text") String text);

Я отправляю текст в мой REST API и получаю массив байтов через ResponseBody следующим образом:

    public void sendText(String text){
        Call<ResponseBody> call = ttsService.sendText(text);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                if(response.isSuccessful()){                       
                    try {
                        downloadMp3(response.body().bytes());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else {
                    Toast.makeText(MainActivity.this, "Error connection", Toast.LENGTH_SHORT).show();                       
                }
            }
    }

Функция downloadMp3(response.body ().bytes()), она получает массив байтов и сохраняет его в файл .mp3 прямо на телефоне:

    private void downloadMp3(byte[] mp3SoundByteArray) {
        try {

            File file = new File(    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
                "audio.mp3"
                );
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(mp3SoundByteArray);
            fos.close();

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

Это способ сохранения массива байтов, хорошо? Есть ли другой способ сохранить массив байтов в файле file.mp3 или в любом аудиофайле, или перед этим необходимо выполнить обработку этого массива байтов?

...