Использование JavaSounds от Tomcat - PullRequest
0 голосов
/ 13 августа 2011

Я пытаюсь написать приложение Java EE, которое записывает звук с входа на сервере. Мой код работает нормально при отладке и работает на сервере как я (как Ubuntu), однако, когда он запускается с веб-сервера, я получаю исключение:

javax.sound.sampled.LineUnavailableException
at org.classpath.icedtea.pulseaudio.PulseAudioMixer.openImpl(PulseAudioMixer.java:714)
at org.classpath.icedtea.pulseaudio.PulseAudioMixer.openLocal(PulseAudioMixer.java:588)
at org.classpath.icedtea.pulseaudio.PulseAudioMixer.openLocal(PulseAudioMixer.java:584)
at org.classpath.icedtea.pulseaudio.PulseAudioMixer.open(PulseAudioMixer.java:579)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:95)
at org.classpath.icedtea.pulseaudio.PulseAudioTargetDataLine.open(PulseAudioTargetDataLine.java:111)
at org.classpath.icedtea.pulseaudio.PulseAudioTargetDataLine.open(PulseAudioTargetDataLine.java:130)

Я пытался добавить пользователя tomcat в аудиогруппу (что предложено в некоторой документации), но он все еще выбрасывает исключение. Я думаю, что единственная разница должна заключаться в окружающей среде, но я не знаю, где может быть проблема.

Ответы [ 2 ]

0 голосов
/ 13 августа 2011

Мне удалось заставить это работать сейчас - но спасибо за помощь.

В конце концов, это была проблема на уровне ОС, в Ubuntu только пользователи в аудиогруппе могут получить доступ к звуковым ресурсам, когда они не вошли в систему (https://wiki.ubuntu.com/Audio/TheAudioGroup)), и для подключения к импульсному звуку похоже, что вам нужна какая-то аутентификация X11. После этих изменений требуется перезапуск, чтобы tomcat мог захватить звуковое устройство раньше, чем что-либо еще.

0 голосов
/ 13 августа 2011

Я предполагаю, что у вас есть соответствующие JAR-файлы в CLASSPATH - либо в вашем приложении WEB-INF / lib, либо в Tomcat /lib.

Тот факт, что вы пытаетесь что-то открыть, наводит на мысль, что, возможно, у вас есть проблема пути. Веб-приложения не могут зависеть от абсолютного пути к файлу, потому что они не могут знать, где будет установлен WAR-файл. Поэтому лучше использовать относительный путь и получать ресурсы в виде потоков. Возможно, есть способ сделать это с этой библиотекой.

...