我有一个非常简约使用 debootstrap 创建的 ubuntu precise 设置。因此,请不要仅仅因为通常安装了任何软件包就认为它们已经安装。在该系统上,我想从 Java 小程序播放一些声音。但是,这总是失败并显示以下错误消息:
javax.sound.midi.MidiUnavailableException: Can not open line
at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:1132)
at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:1036)
...
Caused by: java.lang.IllegalArgumentException: No line matching interface
SourceDataLine supporting format PCM_SIGNED 44100.0 Hz,
16 bit, stereo, 4 bytes/frame, little-endian is supported.
at javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:476)
at javax.sound.sampled.AudioSystem.getSourceDataLine(AudioSystem.java:604)
at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:1066)
... 35 more
由于消息中提到了软合成器和 pcm 线路,我估计缺少某些 midi 守护进程不是问题所在。据我所知,已加载 alsa 内核模块,包括snd_hda_intel
、snd_pcm
等snd_seq_midi
。我还包含了alsa-base和alsa 实用程序我安装中的包。alsa-mixer
看起来不错,使用“HDA Intel PCH”作为其默认设备。
java 需要哪些其他包、配置设置或守护进程启动才能使其声音输出正常工作?
答案1
我自己已经解决了这个问题。使用strace
(我喜欢这个工具!),我发现 java 尝试访问各种 alsa 声音控制设备。其中大多数都不存在(ENOENT
),但第一个也是主要的设备给出(EPERM
),表示权限不足。
从这里开始,修复就很明显了:有问题的设备属于该audio
组,但运行有问题的 Java 小程序的用户不属于该组。将他添加到该组后,错误消息就消失了。
我仍然听不到任何声音,但这可能是由于小程序本身的其他问题造成的。