Бесшумный звук в Апплете Java

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

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

ОБНОВЛЕНИЕ:

  1. Апплет Java отсутствует в "Звуковых предпочтениях-> Приложения", потому что звуки слишком коротки ("звуковой сигнал" и т.д.).
  2. Когда другое приложение производит звуки (.mp3, .ogg музыка), апплет Java не делает.
5
задан Esko 12 April 2010 в 20:17
поделиться

5 ответов

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

1
ответ дан 14 December 2019 в 08:49
поделиться

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

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

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

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

1
ответ дан 14 December 2019 в 08:49
поделиться

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

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

1
ответ дан 14 December 2019 в 08:49
поделиться

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

  1. sudo apt-get purge pulseaudio gstreamer0. 10-pulseaudio
  2. sudo apt-get autoremove
  3. sudo apt-get install 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-properties ----set ALSA по умолчанию

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

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

1
ответ дан 14 December 2019 в 08:49
поделиться

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

3
ответ дан 14 December 2019 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: