当我运行FreeTTS示例时,出现此错误:
LINE UNAVAILABLE: Format is pcm_signed 16000.0 Hz 16 bits 1 channel big endian
在这篇文章中,Freetts problem in Java
有人声称这是已知的Linux / Java声音错误,并且有解决方法,
链接到http://forums.sun.com/thread.jspa?threadID=5189363。
但是,自从Oracle修改了该链接以来,该链接不再起作用。
Archive.org似乎没有存档此页面。
有人有针对FreeTTS的解决方法/补丁吗?
谢谢,
恩德拉
最佳答案
Linux的ALSA是一种大型的复杂API。 OpenJDK和Sun的JDK似乎有不同的用法。大多数现代Linux发行版还使用PulseAudio,该软件可对ALSA进行虚拟化,以便所有音频通过PulseAudio进行软件混合,然后再进入ALSA进行播放。
当没有人访问声卡,而Java是唯一的用户时,它趋向于工作。但是,当其他东西打开声卡时,Java应用程序会因错误和“javax.sound.sampled.LineUnavailableException:Audio Device Unavailable”而迅速中断。
一种可能的解决方法是使用AudioSystem.getMixerInfo()
枚举系统中的所有混合器,然后尝试为所需的混合器打开带有AudioSystem.getSourceDataLine(format, mixerInfo)
的行。有些将比另一些更好。特别是如果存在,“Java声音音频引擎”和“默认[default]”混合器会起作用。
但是,如果您不想修改FreeTTS源代码,唯一的解决方案是安装Pulse-java。这注册了一个特殊的PulseAudio声音提供程序,该提供程序绕过了ALSA虚拟化并直接进入PulseAudio。 Ubuntu将其安装为OpenJDK软件包的一部分。
有人应该真正修补Java声音,以便以更友好的方式与ALSA一起播放。对于一种ALSA,设备名称应以plug:
开头,以使ALSA能够即时转换声音格式和采样率。并且还应遵循safe ALSA subset的其他规则。
关于java - FreeTTS,Java,Linux: “LINE UNAVAILABLE: Format is …”的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035826/