我正在尝试合并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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。