我刚刚安装了 Fedora 12,在下载并运行Java 声音演示我遇到了异常。如果我只运行一个播放.wav
文件的普通 Java 程序,它会默默运行,没有声音,也没有异常。
其他所有应用程序似乎都会播放声音。我还听取了一些建议Ubuntu 论坛中的这个帖子这几乎似乎奏效了。(安装 aoss 消除了声音演示中的初始异常,但我在播放时仍然听不到任何声音。)
当我在 Linux 平台上运行 Java 应用程序时,为了从扬声器中发出声音,我必须经过多个步骤,这让我很沮丧!
有人能帮我找出问题所在吗?
答案1
我找到了自己的答案。从幼儿园应该学到的东西清单中:
如果你的盒子里有第二张声卡,比如最初并不适用于 Linux并导致您开始使用主板上的内置支持,那么您可能没有意识到 Java 音频支持会转到您未使用的声卡。这意味着,即使我的所有其他音频都转到我使用系统托盘中的混音器激活的卡,Java 仍决定将其音频路由到另一张卡。
所以音频实际上一直播放得很顺畅。我只是听不到,因为它是在 Sound Blaster XFi 卡上播放的,而我的扬声器插在主板的音频端口上。如果我听起来很自鸣得意,我很抱歉,但我很沮丧,也没有多少乐趣,尤其是在看到一个严重的问题被否决,而其他面临同样困境的人却不知道这个严重问题的答案之后。
我并不是在抨击 Linux、Fedora 或 Java。我只是想了解为什么本来应该很简单的东西却需要如此复杂的研究。我几乎是偶然发现这一点的,因为一篇文章提示我 Java 音频支持实际上可能会选择不同的驱动程序来传输音频。
答案2
奇怪的是,对我来说,解决办法是添加一个配置文件~/.alsoftrc
,其内容如下:
[pulse]
allow-moves=yes
在我的情况下(Xubuntu 14.04 LTS 上的 Minecraft),java 应用程序拒绝使用实际工作的音频输出(数字音频 hdmi),而是默认使用不存在的模拟音频。
只是把这个放在这里,以便让下一个人想知道为什么 java 不能正确发出声音。
答案3
我也遇到同样的问题。在启动使用声音的 Java 程序之前,如果使用其他使用声音的程序,Java 声音将无法工作。看起来 Java 声音没有使用 Alsa 混音器,而是尝试使用 Alsa 混音器之后的硬件。只有重新启动才能解决问题。
答案4
我在使用 Oracle JAVA 8 的 Raspberry Pi 3 B 上遇到了同样的问题。我添加了一张新声卡。然后按照以下步骤操作,默认声卡已更改:
nano /usr/share/alsa/alsa.conf
更改defaults.ctl.card 0
并defaults.pcm.card 0
保存defaults.ctl.card 1
defaults.pcm.card 1
alsa.conf 文件。
reboot
在 Raspbian Buster(不确定它是否与 Buster 有关)中,我运行了我的Java 测试器代码但问题仍需关注
最后,通过以下步骤,我禁用了启动状态下的默认板载声卡。
nano /boot/config.txt
注释掉dtparam=audio=on
。我的意思是,dtparam=audio=on
改为#dtparam=audio=on
。
参考: