JavaFX-如何同步多个WAV文件?

JavaFX-如何同步多个WAV文件?,java,audio,Java,Audio,我正在用JavaFX用Java制作一个声音播放器,我正在尝试同步播放多个WAV文件。但是当我调用使clip.start()为每个文件运行的方法时,它们完全不同步 这是我按下按钮(播放)时调用的方法的代码 私人剪辑播放声音(ArrayList文件){ 用于(文件:文件){ 试一试{ AudioInputStream AudioInputStream=AudioSystem.getAudioInputStream(文件); clip=AudioSystem.getClip(); clip.open(

我正在用JavaFX用Java制作一个声音播放器,我正在尝试同步播放多个WAV文件。但是当我调用使clip.start()为每个文件运行的方法时,它们完全不同步

这是我按下按钮(播放)时调用的方法的代码

私人剪辑播放声音(ArrayList文件){
用于(文件:文件){
试一试{
AudioInputStream AudioInputStream=AudioSystem.getAudioInputStream(文件);
clip=AudioSystem.getClip();
clip.open(音频输入流);
clip.start();
}捕获(例外e){
System.err.print(“声音文件打开错误\n”+e.getMessage());
}
}
回程夹;
}

如何修复此问题?

添加一个布尔值以检查歌曲是否仍在播放,如果仍在播放,请稍候

我自己没有使用此方法(而是编写了自己的混音器),但根据教程(请参见底部部分同步多行播放)和上的文档,存在支持您描述的同步的混音器

创建
剪辑
时,可以指定
混音器
,而不是像在显示的代码中那样使用默认的
混音器
。语法应该很容易在API中找到。但是关于是否有一个
混音器
可以在给定的操作系统和PC上工作,我对此没有什么经验。如果测试在默认混频器上不起作用,我猜您只需要迭代并测试所有可用的混频器,并希望得到最好的结果。IDK

正如我所说,我回避了这个问题。我正在使用我编写的混音器,它处理将来自组成“剪辑”(实际上是基于
Clip
s的
AudioCue
s)的PCM数据相加。使用此库,您可以在关闭混音器的情况下创建和“播放”音频提示,然后通过一次启动所有音频提示。如果您有多组试图同步的提示,则库允许同时独立运行多个
AudioMixer
实例


欢迎你使用图书馆。或者您可以检查混合代码并编写自己的代码。这种方法的一个重要优点是,该库不易受到混频器功能的OS实现变化的影响。功能是在一个可靠的类
SourceDataLine
上在PCM级别处理的。

但是这如何修复非同步文件呢?我误解了你的问题,我的坏朋友。那么同步是什么意思?我解释为你的意思是你需要他们像播放列表一样播放。编辑:我刚意识到你想让他们一起玩,也许我错了。但是如果我是对的,也许可以尝试在尝试中使用for循环播放所有文件,然后catch是的,我的意思是我希望所有文件同时播放,而不是在彼此之后播放。
private Clip playSound(ArrayList<File> files) {
        for (File file : files) {
            try {
                AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
                clip = AudioSystem.getClip();
                clip.open(audioInputStream);
                clip.start();
            } catch (Exception e) {
                System.err.print("Sound file open error\n " + e.getMessage());
            }
        }
        return clip;
    }