java - FreeTTS,Java,Linux: “LINE UNAVAILABLE: Format is …”的解决方法

标签 java audio text-to-speech freetts

当我运行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/

相关文章:

audio - ffmpeg "Header Missing"重新编码 mp3 文件时出错

javascript - 使用 HTML5/javascript 校正音频音量输出分贝,关闭预处理

android - onRangeStart() 在阅读段落时停止获取回调(遇到标点符号后)

java - java.awt 的 Dimension 类中的方法返回类型

java - System.currentTimeMillis() 仅每 128 秒更新一次?

java - drop-and-create-tables 太容易掉落

ios - 我可以在 iOS 上使用图像作为音频剪辑的海报框架吗?

java - 在 GCMIntentService 中实例化 TextToSpeech

ios - AVSpeech合成器: AVSpeechSynthesisIPANotationAttribute seems like does not support Chinese

java - apache flink 0.10 如何从无界输入数据流中获取第一次出现的复合键?