gpt4 book ai didi

java - 使用 Stackoverflow 的 javasound 标签示例播放音频

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:58 28 4
gpt4 key购买 nike

阅读 今天早些时候标记,我尝试实现我们可以在那里看到的简单代码(有一些小的修改,例如使用 File 而不是 URL):

File file = new File(System.getProperty("user.dir") + "/sound.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(file);
clip.open(ais); // exception

但是当我尝试打开我们在那里看到的 AudioInputStream 时,我得到了一个 java.lang.IllegalArgumentException: Invalid format

但是,当我使用从互联网上获得的以下代码进行尝试时

File file = new File(System.getProperty("user.dir") + "/sound.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(file);
AudioFormat format = ais.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip clip = (Clip)AudioSystem.getLine(info);
clip.open(ais);
clip.start();

确实工作:sound.wav 播放正确 - 然而,我发现这对于应该像我们的第一个示例一样简单的东西来说很笨重,给出了标记自身。

通过阅读 documentation from clip ,我承认 IllegalArgumentException[...] 流的音频格式未完全指定或无效 时抛出。但是,它似乎是一种有效的格式。

我们这里的第一个例子有什么问题? AudioSystem.getAudioInputStream()确实接受 File 作为参数,并且从第二个示例中可以看出,它似乎确实具有有效的音频文件数据,因为它有效。我错过了一些明显的东西吗?而且,如果是这样,难道不应该在 上指出吗?标签?

最佳答案

经过一些研究,我发现它可能与系统属性有关。在这些属性中,您可以为 getLine() 方法(getLine()、getClip()、getSourceDataLine() 和 getTargetDataLine())指定默认值。如果您调用这些方法之一,Java 会执行以下操作 ( AudioSystem description ):

系统属性 javax.sound.sampled.Clip 设置为

javax.sound.sampled.Clip = great.Mixer#great.clip.Clap

Mixer 类称为great.Mixer,Clip 类称为great.clip.Clap

当您请求剪辑时,Java 会检查以下内容:

  • 如果找到混音器great.Mixer并且包含剪辑great.clip.Clap,返回这个剪辑
  • 如果找到混音器great.Mixer,但不包含剪辑great.clip.Clap,则返回混音器中指定的第一个剪辑
  • 如果混音器 great.Mixer 不包含任何剪辑或未找到,则返回任何混音器中 great.clip.Clap 的第一个实例
  • 如果没有 Mixer 包含 great.clip.Clap,则返回找到的第一个 Mixer 的第一个 Clip
  • 如果在任何 Mixer 中都没有指定 Clip,则抛出一个 IllegalArgumentException

这意味着如果您收到 IllegalArgumentException,则说明没有 Clips 安装在任何 Mixer 中。

DataLine.Info info = new DataLine.Info(Clip.class, format);

您正在定义一个新剪辑。这意味着您对 getLine() 方法的下一次调用将返回此对象,而不是给您一个错误。

关于java - 使用 Stackoverflow 的 javasound 标签示例播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26435282/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com