Я использую апплет Java, который производит нежелательные звуки для меня. Бесшумная опция в апплете отсутствует, и не возможно переписать исходный код. Я хочу услышать другой (не-JVM) звуки приложений. Как я подавляю этот апплет Java (или JVM) звуковой вывод, не отключая его?
Я использую Ubuntu 9.10, jre1.6.0_18 и Mozilla FF 3.5.8.
ОБНОВЛЕНИЕ:
вероятно, это должно быть в power user. Вы можете использовать импульсный звук для управления звуками приложений (если вы его не отключили). Это должно быть в настройках звука. Щелкните правой кнопкой мыши на апплете громкости и откройте настройки, перейдите на вкладку приложений.
Мне интересно, сможет ли пользовательская локальная политика безопасности остановить апплет от доступа к аудио?
Я не исследовал это далеко (погуглил термины java applet local policy
)
http://www.wutka.com/hackingjava/ch3.htm#CreatingaCustomizedSecurityManager
Апплет, вероятно, выйдет с исключением, если он не сможет загрузить аудиофайл или выполнить аудиокод, но это может стоить попробовать.
Еще одна короткая страница http://www.jensign.com/JavaScience/www/policyfiles/
Похоже, что Pulse хранит настройки громкости для отдельных приложений в файле Trivial Database (tbd) в вашем домашнем каталоге: (~ / .pulse / (guid) -stream-volumes.tdb)
Команда tdbtool из пакет Synaptic "tdb-tools" можно использовать для проверки записей этого файла, но он не предназначен для редактирования и кажется невозможным (кроме тех, кто хорошо знает импульсный код), потому что все значения имеют шестнадцатеричный формат и их трудно прочитать или понять.
Я никогда не сталкивался с проблемой, подобной вашей, но я полностью удалил pulseaudio и с тех пор у меня никогда не было никаких проблем. Если вы хотите пойти по этому пути, вот инструкции по безопасной замене pulseaudio на alsa.
Теперь вы всегда можете использовать alsamixergui для управления звуком для всех приложений.
Надеюсь, это решит вашу проблему.
Если вы контролируете развертывание апплета (то есть веб-страницу, на которой размещен апплет), вы можете написать свою собственную программу запуска апплета. Средство запуска функционирует как оболочка, которая предоставляет настраиваемую среду фактическому апплету. Средство запуска создает экземпляр реального апплета и передает ему настроенные версии среды апплета (AppletStub, AppletContext). Специальная среда реализует AudioClip как интерфейс «ничего не делать».
Чтобы отключить звук, вы можете переопределить AppletContext следующим образом:
class CustomAppletContext implements AppletContext
{
AppletContext realContext;
// most methods delegate to the real context, either directly, or with a little modification to hide the fact that we are using this launcher
public void setStatus(String status)
{
realContext.setStatus(status);
}
// override the getAudioClip to return a dummy clip
public AudioClip getAudioClip(URl url)
{
return new DummyAudioClip();
}
}
// An AudioClip implementation that does nothing
class DummyAudioClip implements AudioClip
{
public void loop() { }
public void play() { }
public void stop() { }
}
Мы также переопределяем AppletStub, поскольку именно здесь апплет получает AppletContext из
class CustomAppletStub implements AppletStub
{
AppletStub realStub;
public AppletContext getAppletContext()
{
return new CustomAppletContext(realStub.getAppletContext());
}
}
А затем ваша программа запуска:
class AppletLauncher extends Applet
{
private Applet realApplet = new NoisyApplet();
// delegate most methods to the applet, but override the stub, to inject our
// AppletContext and AudioClip implementation
public void setAppletStub(AppletStub stub)
{
realApplet.setAppletStub(new CustomAppletStub(stub));
}
}
Похоже, что много кода, но на самом деле это всего лишь несколько классов, и в основном они подключаются только для того, чтобы внедрить новую реализацию DummyAudioClip.
HTH!