Mp3-файл не воспроизводится после преобразования с байта android

Я просто конвертирую mp3-файл в байт-код и переконвертирую этот байт-код в mp3 и сохраняемый на SD-карте, весь процесс идет успешно, но проблема в том, что сохраненный mp3-файл не воспроизводится на устройстве mp3-плеера, отображающем неподдерживаемый формат.

Есть ли какие-либо проблемы в моем нижнем коде

private void convertBytesToFile(byte[] bytearray) { byte[] bytes = bytearray; String encoded = Base64.encodeToString(bytes, 0); // Utilities.log("~~~~~~~~ Encoded: ", encoded); byte[] decoded = Base64.decode(encoded, 0); //Utilities.log("~~~~~~~~ Decoded: ", Arrays.toString(decoded)); try { File file2 = new File(Environment.getExternalStorageDirectory() + "/hello-2.mp3"); FileOutputStream os = new FileOutputStream(file2, true); os.write(decoded); os.close(); } catch (Exception e) { Toast.makeText(this, "Somthing wrong", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } 

Или чего-то, чего мне не хватает. Пожалуйста, помогите друзьям.

Solutions Collecting From Web of "Mp3-файл не воспроизводится после преобразования с байта android"

Почему вы конвертировали этот mp3 в Base64? Если вы хотите сохранить на SD-карту, сделайте ниже код

 private void convertBytesToFile(byte[] bytearray) { FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/hello-2.mp3"); fos.write(byteArray); fos.close() } 

Попробуйте этот код может решить вашу проблему,

 private void convertBytesToFile(byte[] bytearray) { try { File outputFile = File.createTempFile("MediaFile", "mp3", getCacheDir()); outputFile.deleteOnExit(); FileOutputStream fileoutputstream = new FileOutputStream(outputmediafile); fileoutputstream.write(bytearray); fileoutputstream.close(); } catch (IOException ex) { ex.printStackTrace(); } } 

Воспроизведение медиафайла в любом медиаплеере.

Для воспроизведения MP3 (в вашем сценарии)

 private void playMp3(byte[] mp3SoundByteArray) { try { // create temp file that will hold byte array File tempMp3 = File.createTempFile("fmtemp", "mp3", getCacheDir()); tempMp3.deleteOnExit(); FileOutputStream fos = new FileOutputStream(tempMp3); fos.write(mp3SoundByteArray); fos.close(); mediaPlayer.reset(); FileInputStream fis = new FileInputStream(tempMp3); mediaPlayer.setDataSource(fis.getFD()); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException ex) { ex.printStackTrace(); } } 

Android SDK не имеет mp3-кодера. Если вы хотите сохранить файл byte [] в .mp3, используйте собственную библиотеку, как показано ниже.

https://github.com/naman14/TAndroidLame https://github.com/yhirano/SimpleLameLibForAndroid

Как заметил Джонас , слияние двух mp3-файлов не так просто, как слияние их байтов, поскольку файлы содержат метаданные. Однако есть решение, вы можете использовать FFmpeg . Вы можете использовать встроенную сборку или оболочку, такую ​​как JavaCV . Вот пример того, как объединить два Mp3-файла с помощью JavaCV

  FrameGrabber grabber = new FFmpegFrameGrabber("input.mp3"); grabber.start(); FrameGrabber grabber2 = new FFmpegFrameGrabber("input2.mp3"); grabber2.start(); FrameRecorder recorder = new FFmpegFrameRecorder("output.mp3", grabber.getAudioChannels()); recorder.setSampleFormat(grabber.getSampleFormat()); recorder.setSampleRate(grabber.getSampleRate()); recorder.start(); Frame frame; while ((frame = grabber.grabFrame()) != null) { recorder.record(frame); } while ((frame = grabber2.grabFrame()) != null) { recorder.record(frame); } recorder.stop(); grabber.stop(); grabber2.stop(); 

PS Im, предполагая, что частота выборки для обоих файлов одинакова

https://github.com/adrielcafe/AndroidAudioConverter

(Конвертируйте аудиофайлы в ваше приложение для Android. Поддерживаемые форматы: AAC, MP3, M4A, WMA, WAV и FLAC)