从byte [] android转换后,Mp3文件没有播放

时间:2016-11-14 08:48:21

标签: android base64 mp3 decode encode

我只是将一个mp3文件转换为字节代码并将该字节代码重新转换为mp3并保存到sdcard,所有过程都成功进行但问题是保存的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();
    }

}

或者我遗失的任何东西。 请帮助朋友。

6 个答案:

答案 0 :(得分:0)

为什么要将该mp3转换为Base64?如果你想保存到SD卡,请执行以下代码

private void convertBytesToFile(byte[] bytearray) {

    FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/hello-2.mp3");
    fos.write(byteArray);
    fos.close()
    }

答案 1 :(得分:0)

尝试此代码可能会解决您的问题,

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

在任何媒体播放器中播放媒体文件。

答案 2 :(得分:0)

播放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();
        }
    }

答案 3 :(得分:0)

Android SDK没有mp3编码器。如果要将byte []保存到.mp3文件,请使用如下的本机库。

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

答案 4 :(得分:0)

正如Jonas所提到的,合并两个mp3文件并不像合并字节那样容易,因为文件包含元数据。但是有一个解决方案,你可以使用FFmpeg。您可以使用本机构建或包含JavaCV等包装。以下是如何使用JavaCV合并两个Mp3文件的示例

      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假设两个文件的采样率相同

答案 5 :(得分:0)

https://github.com/adrielcafe/AndroidAudioConverter

(轻松转换Android应用内的音频文件。支持的格式:AAC,MP3,M4A,WMA,WAV和FLAC)