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();
        }
    }
相关推荐
2601_962885725 分钟前
如何用 Python 算最大回撤和回撤恢复期?
java·数据库·python
毕业设计70336 分钟前
(免费领源码)SSM董家湾线上点餐系统04682- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·redis·mysql·tomcat·maven·mybatis·ssm
ACP广源盛139246256731 小时前
项目评估记录:4K 远距离视频 Serdes 传输方案调研,GSV5800@ACP参数与工程问题记录
笔记·硬件架构·音视频·视频·国产芯片
Q26433650231 小时前
【有源码】基于SpringBoot+Vue的居民健康体检与慢病干预管理系统-面向智慧医疗的体检预约与健康知识服务平台
java·vue.js·spring boot·mysql·毕业设计·javaweb·课程设计
悠仁さん1 小时前
非类型模板参数的特化与偏特化
java·数据结构·算法
鬼手点金1 小时前
上下文:Agent 的眼睛
java·前端·人工智能·git·深度学习
171320330计算机毕设编程2 小时前
计算机毕业设计 基于Hadoop的新能源汽车发展前景分析 LW PPT
java·大数据·hadoop·python·算法·随机森林·线性回归
技术小结-李爽2 小时前
【工具】怎么在终端中启动springboot项目?
java·spring boot·后端·maven
Shaoshing2 小时前
消息发送
java·开发语言