嗯,我最好在问完问题后用谷歌搜索,所以......:
http :
//workorhobby.blogspot.com/2011/02/java-audio-freetts-line-unavailable.html 非常感谢作者。
更新:实际上,这不是一个很好的解决方法,因为它将保持 FreeTTS 暂停,直到线路空闲。
FWIU,提到的补丁有更好的解决方案——不要求独占访问等。
更新:我已经编译了一个FreeTTS 故障排除页面。
一个基于 FreeTTS(Java 的免费文本到语音引擎)的程序偶尔会出现错误
"LINE UNAVAILABLE: Format is ..."
事实证明,没有 Java 异常或其他机制来检测 FreeTTS 库中发生的此错误。您得到的只是 System.out 上的消息,因此没有以编程方式做出反应的好方法。
解决方法:将 FreeTTS 音频播放器配置为多次尝试访问音频设备,直到成功。在此示例中,使用 0.1 秒的短暂延迟以不错过抓取音频设备的机会;我们继续尝试 30 秒:
System.setProperty("com.sun.speech.freetts.audio.AudioPlayer.openFailDelayMs", "100");
System.setProperty("com.sun.speech.freetts.audio.AudioPlayer.totalOpenFailDelayMs", "30000");
如果音频设备被另一个程序永久使用,当然没有办法访问。在 Linux 下,此命令将显示当前持有音频设备的进程的 ID,因此您可以尝试摆脱有问题的程序:
/sbin/fuser /dev/dsp