У меня есть функция, которая получает байтовый массив и сохраняет его в «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 или в любом аудиофайле, или перед этим необходимо выполнить обработку этого массива байтов?