Хм, мне повезло гуглить после того, как задал вопрос, так что ...: http://workorhobby.blogspot.com/2011/02/java-audio-freetts-line-unavailable.html Большое спасибо автору.
Обновление: Собственно, этоэто не хороший обходной путь, так как он будет удерживать FreeTTS до тех пор, пока линия не освободится.
FWIU, у упомянутого патча было лучшее решение - не требующий эксклюзивного доступа или тому подобное.
Обновление: Я скомпилировал страницу устранения неполадок FreeTTS .
Программа, основанная на FreeTTS, бесплатном движке преобразования текста в речь для Java, получала случайные ошибки
"LINE UNAVAILABLE: Format is ..."
Оказывается, что нет Java Exception или другого механизма для обнаружения этой ошибки, которая происходит внутри библиотеки 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 эта команда отобразит идентификатор процесса, который в данный момент удерживает аудиоустройство, поэтому вы можете попытаться избавиться от программы-нарушителя:
/sbin/fuser /dev/dsp