java 如何把多个音频合成一个

java 复制代码
    public static void main(String[] args) {
        File file1 = new File("D:\\配音\\LOL稳健4.mp3");
        File file2 = new File("D:\\配音\\LOL稳健4-2.mp3");
        File file3 = new File("D:\\配音\\LOL稳健444.mp3");

        // 创建要合并的音频文件对象列表
        List<File> sourceFiles = new ArrayList<>();
        sourceFiles.add(file1);
        sourceFiles.add(file2);

        mergeAudioFiles(sourceFiles, file3);
    }

    private static void mergeAudioFiles(List<File> audioFiles, File outputFile) {
        try {
            long totalLength = 0;
            AudioFormat audioFormat = null;
            AudioInputStream audioInputStream = null;
            List<AudioInputStream> audioInputStreams = new ArrayList<>();

            // 读取每个音频文件,获取其音频格式和音频流
            for (File audioFile : audioFiles) {
                audioInputStream = AudioSystem.getAudioInputStream(audioFile);
                totalLength += audioInputStream.getFrameLength();
                audioFormat = audioInputStream.getFormat();
                audioInputStreams.add(audioInputStream);
            }

            // 创建新的音频格式和流
            boolean isSigned = audioFormat.getEncoding() == AudioFormat.Encoding.PCM_SIGNED;
            AudioFormat newAudioFormat = new AudioFormat(audioFormat.getSampleRate(),
                audioFormat.getSampleSizeInBits(),
                audioFormat.getChannels(),
                isSigned,
                audioFormat.isBigEndian());
            AudioInputStream mergedAudioStream = new AudioInputStream(
                new SequenceInputStream(Collections.enumeration(audioInputStreams)),
                newAudioFormat,
                totalLength
            );

            // 写入合并后的音频流到输出文件
            AudioSystem.write(mergedAudioStream, AudioFileFormat.Type.WAVE, outputFile);

            // 关闭所有音频流
            for (AudioInputStream ais : audioInputStreams) {
                ais.close();
            }

            mergedAudioStream.close();
        } catch (UnsupportedAudioFileException | IOException e) {
            e.printStackTrace();
        }
    }
相关推荐
好奇的菜鸟15 分钟前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
DuelCode1 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社21 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
幽络源小助理1 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
猴哥源码1 小时前
基于Java+springboot 的车险理赔信息管理系统
java·spring boot
YuTaoShao2 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
Dcs3 小时前
超强推理不止“大”——手把手教你部署 Mistral Small 3.2 24B 大模型
java
东阳马生架构3 小时前
订单初版—1.分布式订单系统的简要设计文档
java
Code blocks3 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
荔枝吻3 小时前
【沉浸式解决问题】idea开发中mapper类中突然找不到对应实体类
java·intellij-idea·mybatis