Отключить звук в Java-апплете - PullRequest
5 голосов
/ 20 февраля 2010

Я использую Java-апплет, который производит нежелательные звуки для меня. Опция отключения звука в апплете отсутствует, и невозможно переписать исходный код. Я хочу слышать звуки других (не JVM) приложений. Как подавить вывод звука этого Java-апплета (или JVM), не отключая его?

Я использую Ubuntu 9.10, jre1.6.0_18 и Mozilla FF 3.5.8.

UPDATE:

  1. Java-апплет отсутствует в «Настройки звука-> Приложения», поскольку звуки слишком короткие («звуковой сигнал» и т. Д.).
  2. Когда другое приложение воспроизводит звуки (.mp3, .ogg music), java-апплет этого не делает.

Ответы [ 5 ]

3 голосов
/ 27 апреля 2010

Если вы контролируете развертывание апплета (то есть веб-страницу, на которой размещен апплет), вы можете написать свой собственный модуль запуска апплета. Модуль запуска функционирует как оболочка, которая обеспечивает пользовательскую среду для реального апплета. Модуль запуска создает экземпляр реального апплета и передает ему настроенные версии среды апплета (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, поскольку именно здесь Applet получает 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.

НТН!

1 голос
/ 13 апреля 2010

Я никогда не сталкивался с такой проблемой, как ваша, но я полностью удалил pulseaudio и с тех пор никогда не встречал никаких нареканий. В случае, если вы хотите пойти по этому пути, здесь приведены инструкции по безопасной замене pulseaudio на alsa.

  1. sudo apt-get purge pulseaudio gstreamer0.10-pulseaudio
  2. sudo apt-get autoremove
  3. sudo apt-get установить alsa-base alsa-tools alsa-tools-gui alsa-utils alsa-oss linux-sound-base alsamixergui
  4. sudo apt-get install esound esound-clients esound-common libesd-alsa0 gnome-alsamixer
  5. Перезагрузите компьютер!
  6. свойства gstreamer ---- установить ALSA по умолчанию

Теперь вы всегда можете использовать alsamixergui для управления звуком для всех приложений.

Надеюсь, что решит вашу проблему.

1 голос
/ 22 февраля 2010

Мне интересно, сможет ли пользовательская локальная политика безопасности помешать апплету получать доступ к аудио? Я не исследовал это далеко (Погуглил условия java applet local policy)

http://www.wutka.com/hackingjava/ch3.htm#CreatingaCustomizedSecurityManager

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

Еще одна короткая страница http://www.jensign.com/JavaScience/www/policyfiles/

1 голос
/ 13 апреля 2010

Похоже, что Pulse хранит настройки громкости для отдельных приложений в файле Trivial Database (tbd) в вашем домашнем каталоге: (~ / .pulse / (guid) -stream-volume.tdb)

Команда tdbtool из пакета Synaptic "tdb-tools" может использоваться для проверки записей этого файла, но она не предназначена для редактирования и, по-видимому, невозможна (кроме тех, кто обладает глубокими знаниями о пульсе). код), потому что все значения представлены в шестнадцатеричном формате и не являются легко читаемыми или понятными.

1 голос
/ 20 февраля 2010

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

...