我只是将一个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();
}
}
或者我遗失的任何东西。 请帮助朋友。
答案 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)