首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在android中按顺序合并2个音频文件?

在android中按顺序合并2个音频文件?
EN

Stack Overflow用户
提问于 2013-01-23 15:06:52
回答 2查看 5.2K关注 0票数 4

如何在android平台下将两个音频文件合并为一个文件。也就是说,如果我有两个音频文件,即A和B.Please,给我代码来创建一个新的音频文件C,该文件在A之后追加B。是否需要将音频文件转换为字节/短数组?

我确实喜欢这个,但它只播放第一个文件。

代码语言:javascript
复制
            File firstFile=new File("/mnt/sdcard/Android/data/Dictation/Audio/Dict136.3gp");

            File secondFile=new File("/mnt/sdcard/Android/data/Dictation/Audio/Dict139.3gp");

            System.out.println("1 file:::::"+firstFile+"\n 2nd file::"+secondFile);


           FileInputStream fistream1;
        try {
            fistream1 = new FileInputStream(firstFile);
            FileInputStream fistream2 = new FileInputStream(secondFile);//second source file



            SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2);
            FileOutputStream fostream = new FileOutputStream("/mnt/sdcard/Android/data/Dictation/Audio/merged.3gp");//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
            }



            filePath="/mnt/sdcard/Android/data/Dictation/Audio/merged.3gp";
            playAudio(filePath);


            fostream.close();
            fistream1.close();
            fistream2.close();

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-01-06 05:40:19

要组合3gp或mp4容器中的音频文件,您应该能够使用https://github.com/sannies/mp4parser查看示例:https://github.com/sannies/mp4parser/blob/master/examples/src/main/java/com/googlecode/mp4parser/AppendExample.java

获取mp4parser jar (通过maventral)并执行以下操作:

代码语言:javascript
复制
        File firstFile=new File("/mnt/sdcard/Android/data/Dictation/Audio/Dict136.3gp");
        File secondFile=new File("/mnt/sdcard/Android/data/Dictation/Audio/Dict139.3gp");

        Movie movieA = MovieCreator.build(firstFile);
        Movie movieB = MovieCreator.build(secondFile);
        final Movie finalMovie = new Movie();

        List<Track> audioTracks = new ArrayList<>();
        for (Movie movie : new Movie[] { movieA, movieB}) {
            for (Track track : movie.getTracks()) {
                if (track.getHandler().equals("soun")) {
                    audioTracks.add(track);
                }
            }
        }
        finalMovie.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));

        final Container container = new DefaultMp4Builder().build(finalMovie);
        File mergedFile = new File("/mnt/sdcard/Android/data/Dictation/Audio/merged.3gp");
        final FileOutputStream fos = new FileOutputStream(mergedFile);
        FileChannel fc = new RandomAccessFile(mergedFile, "rw").getChannel();
        container.writeContainer(fc);
        fc.close();
票数 7
EN

Stack Overflow用户

发布于 2013-01-23 15:22:24

您可以尝试使用File Input/output Stream来实现这一点。要读取字节数组中的任何文件,请使用

代码语言:javascript
复制
byte[] buffer = new byte[FILE_SIZE_HERE];
FileInputStream fs = new FileInputStream(file);
int bytesRead = 0;
bytesRead = fs.read(buffer, 0, FILE_SIZE_HERE);

这里buffer包含文件的字节数组。这样,您就可以获得这两个文件的字节数组。现在在第二步中,当你已经取得了机器人文件的字节数组,你需要将两个字节数组拷贝到一个单独的数组中,然后你可以使用下面的命令将这个(第三个新数组)写到一个新文件中

代码语言:javascript
复制
FileOutputStream fout = new FileOutputStream(tempFile, true);
fout.write(data);
fout.close();

其中,data是合并两个阵列后将获得的新的第3个阵列

编辑: See this how to combine two arrays

希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14474195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档