Отключить звук в Java-апплете

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

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

ОБНОВИТЬ:

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

person INeedUrHelpRly    schedule 20.02.2010    source источник
comment
Это больше похоже на вопрос о конфигурации Linux, чем на вопрос о программировании.   -  person Pool    schedule 22.02.2010


Ответы (5)


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

ХТХ!

person mdma    schedule 27.04.2010

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

person Roman A. Taycher    schedule 20.02.2010
comment
Да, я могу управлять ДРУГИМИ приложениями с этой штуки, но нет java-апплета, который воспроизводит звуки. - person INeedUrHelpRly; 21.02.2010

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

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

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

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

person Photodeus    schedule 22.02.2010

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

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

person xhalarin    schedule 12.04.2010

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

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

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

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

person Suvir    schedule 13.04.2010