linux - Java 在 Windows 上播放音频,但在 Ubuntu 上不播放

标签 linux ubuntu audio java

我一直在写一个 Java 程序来播放一些 .wav 格式的曲子。

在开发过程中,音频在我的 Windows 机器上播放良好,但是在 Ubuntu 上尝试相同的代码时,音频无法播放。控制台没有记录任何错误,我按下“播放”按钮,没有任何 react 。

这是我一直在使用的代码,还包含一些日志记录代码:

try {
    System.out.println("All mixers:");
    for (Mixer.Info m : AudioSystem.getMixerInfo()) {
        System.out.println(m.getName());
    }

    System.out.println("Default mixer: " + AudioSystem.getMixer(null).getMixerInfo());

    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("bsc.wav"));
    Clip clip = AudioSystem.getClip();
    clip.open(audioInputStream);
    clip.start();
} catch (UnsupportedAudioFileException ex) {
    ex.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
} catch (LineUnavailableException ex) {
    ex.printStackTrace();
}

这输出:
All mixers:
Port HDMI [hw:0]
Port PCH [hw:1]
Port Snowball [hw:2]
HDMI [plughw:0,3]
HDMI [plughw:0,7]
HDMI [plughw:0,8]
PCH [plughw:1,0]
PCH [plughw:1,1]
PCH [plughw:1,2]
Snowball [plughw:2,0]
Default mixer: HDMI [plughw:0,3], version 5.3.0-51-generic

认为这比代码更可能是我的设置问题,所以认为这适合 super 用户。还编写了一些代码来尝试其他可用的混音器,但这些都不起作用。

环顾四周,确实听说需要安装 JMF,但找不到它是否真的是解决方案。

运行 Ubuntu 19.10 和 Java 11.0.7 OpenJDK。

编辑1;找到 this page关于 Java 声音的 StackOverflow。尝试运行示例代码但也无济于事......

最佳答案

这里有几件事需要调查和(可能)排除。

  • 你的按钮是JavaFX吗?如果是这样,您是否验证过 JavaFX 是否正常工作?
  • 您是否验证了File的地址?正在创建的对象?
  • 尝试使用 URL作为您的 AudioSystem.getAudioInputStream 参数,使用 class.getResource(URL) 设置它。
  • 使用 ais 获取 Dataline.Info对象作为过程的一部分。

  • 使用 Dataline.Info 的代码如下:
    AudioInputStream ais = AudioSystem.getAudioInputStream(url);
    DataLine.Info info = new DataLine.Info(Clip.class, ais.getFormat());
    Clip clip = (Clip) AudioSystem.getLine(info);
    clip.open(ais);
    

    您可以检查 Clip在播放之前在调试器中。检查 .audioData 属性,以验证数据是否已加载到内存中。您还可以在此处验证音频格式。

    我刚刚经历了一个复杂的尝试,试图让一个在 Windows 中制作的 jar 文件在 Ubuntu 18.04 上执行。事实证明它实际上与 JavaFX 相关。一旦我解决了这个问题,程序就会运行(包括它的音频)。处理音频 Assets 时,我总是使用 URL。

    关于linux - Java 在 Windows 上播放音频,但在 Ubuntu 上不播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61528808/

    相关文章:

    linux - stdio 通信的安全性

    linux - 在 Ubuntu Linux 上安装 Qt Symbian 构建目标

    MYSql 配置绑定(bind)地址设置为 0.0.0.0 但 netstat 在 Ubuntu 上显示不同

    java - 音频和背景模糊以错误的顺序发生

    android - 我可以在应用关闭时更改推送通知的声音吗?

    linux - 如何将源服务器中文件的 md5checksum 与 shell 脚本中的目标服务器进行比较?

    linux - 我无法使用最新的 rpi-3.18.0 内核启动并启用设备树?

    java - 播放的音频超过了java中设置的持续时间

    linux - UEFI 阻止安装 Linux

    MySQL Community Server 8 不想启动