如何在android中合并两个或多个mp3音频文件?
我正在尝试合并mp3音频文件但不成功. 这是我的代码.
public static void meargeAudio(List<File> filesToMearge){
while (filesToMearge.size()!=1){
try {
FileInputStream fistream1 = new FileInputStream(new File(filesToMearge.get(0).getPath())); //(/storage/emulated/0/Audio Notes/1455194356500.mp3) first source file
FileInputStream fistream2 = new FileInputStream(new File(filesToMearge.get(1).getPath()));//second source file
File file1 = new File(filesToMearge.get(0).getPath());
boolean deleted = file1.delete();
File file2 = new File(filesToMearge.get(1).getPath());
boolean deleted1 = file2.delete();
SequenceInputStream sistream = new SequenceInputStream(fistream1,fistream2);
FileOutputStream fostream = new FileOutputStream(new File(filesToMearge.get(0).getPath()),true);//destinationfile
int temp;
while ((temp = sistream.read()) != -1) {
// System.out.print( (char) temp ); // to print at DOS prompt
fostream.write(temp); // to write to file
}
filesToMearge.add(0,new File(filesToMearge.get(0).getPath()));
filesToMearge.remove(1);
filesToMearge.remove(1);
fostream.close();
sistream.close();
fistream1.close();
fistream2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
例如
firstFileSize = 12kb
secondFileSize = 10kb
finalfileSize = 22KB
尺寸准确但缺少声音
没有错误,但结果我发现finalfile只包含第一个文件音频第二个文件音频丢失.
不知道是什么问题.任何人都知道解决方案对我有帮助.
谢谢
解决方法
使用mp4parser解决了它
import com.googlecode.mp4parser.authoring.Movie;
import com.googlecode.mp4parser.authoring.Track;
import com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder;
import com.googlecode.mp4parser.authoring.container.mp4.MovieCreator;
import com.googlecode.mp4parser.authoring.tracks.AppendTrack;
对于你的情况,我相信这样的事情应该有效:
public static void mergeAudio(List<File> filesToMerge) {
String output = Environment.getExternalStorageDirectory().getAbsolutePath() + "output.mp3";
while (filesToMerge.size()!=1){
try {
String[] videoUris = new String[]{
filesToMerge.get(0).getPath(),filesToMerge.get(0).getPath()
};
List<Track> videoTracks = new LinkedList<Track>();
List<Track> audioTracks = new LinkedList<Track>();
for (Movie m : inMovies) {
for (Track t : m.getTracks()) {
if (t.getHandler().equals("soun")) {
audioTracks.add(t);
}
if (t.getHandler().equals("vide")) {
videoTracks.add(t);
}
}
}
Movie result = new Movie();
if (!audioTracks.isEmpty()) {
result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
}
if (!videoTracks.isEmpty()) {
result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
}
Container out = new DefaultMp4Builder().build(result);
FileChannel fc = new RandomAccessFile(output,"rw").getChannel();
out.writeContainer(fc);
fc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
有一些答案表明,例如:
> Merging 2 audio files sequentially in android? > Concatenate two audio files and play resulting file
总结
以上是编程之家为你收集整理的如何在android中合并两个或多个mp3音频文件?全部内容,希望文章能够帮你解决如何在android中合并两个或多个mp3音频文件?所遇到的程序开发问题。
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2021/01/06 03:35