Java Applet中的静音

时间:2010-02-20 02:18:12

标签: java ubuntu applet audio mute

我使用的是一个Java小程序,它会向我发出不需要的声音。 applet中的静音选项丢失,无法重写源代码。 我想听听其他(非JVM)应用程序的声音。 如何在不禁用它的情况下抑制此Java小程序(或JVM)声音输出?

我正在使用Ubuntu 9.10,jre1.6.0_18和Mozilla FF 3.5.8。

更新:

  1. “声音首选项 - >应用程序”中缺少Java小程序,因为声音太短(“哔”等)。
  2. 当其他应用程序产生声音(.mp3,.ogg音乐)时,java applet不会。

5 个答案:

答案 0 :(得分:3)

如果您控制applet的部署(即托管applet的网页),您可以编写自己的Applet Launcher。启动器用作包装器,为实际的applet提供自定义环境。启动器实例化真实的applet并传递给applet环境的自定义版本(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实现。

HTH!

答案 1 :(得分:1)

可能应该是超级用户。 您可以使用脉冲音频来控制应用程序声音(假设您没有禁用它) 它应该是合理的偏好。 右键单击卷小程序并打开首选项单击应用程序选项卡。

答案 2 :(得分:1)

我想知道自定义本地安全策略是否能够阻止applet访问音频? 我没有调查它(用Google搜索术语java applet local policy

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

如果加载音频文件或运行音频代码失败,applet可能会以异常退出,但它可能值得一试。

另一个短篇小说 http://www.jensign.com/JavaScience/www/policyfiles/

答案 3 :(得分:1)

Pulse似乎将各个应用程序的音量设置存储在主目录中的普通数据库(tbd)文件中:(〜/ .pulse /(guid)-stream-volumes.tdb)

来自Synaptic“tdb-tools”软件包的tdbtool命令可以用来检查这个文件的记录,但它不是要编辑的,似乎是不可能的(除了那些对脉冲有深入了解的人)代码)因为所有值都是十六进制格式,不易读取或理解。

答案 4 :(得分:1)

我从来没有遇到像你这样的问题,但是我完全删除了pulseaudio,从那时起就没有任何补偿。如果您想沿着这条路走下去,这里有一些安全地用alsa替换pulseaudio的说明。

  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 ----将ALSA设置为默认值
  7. 现在,您可以随时使用alsamixergui来管理所有应用的声音。

    希望能解决你的问题。