5

我使用了一个 Java 小程序,它对我产生了不想要的声音。小程序中缺少静音选项,无法重写源代码。我想听听其他(非 JVM)应用程序的声音。如何在不禁用它的情况下抑制这个 Java 小程序(或 JVM)声音输出?

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

更新:

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

5 回答 5

3

如果您可以控制小程序的部署(即托管小程序的网页),您可以编写自己的小程序启动器。启动器用作为实际小程序提供自定义环境的包装器。启动器实例化真正的小程序并将定制版本的小程序环境(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 实现而进行的布线。

于 2010-04-27T17:55:05.093 回答
1

我想知道自定义本地安全策略是否能够阻止小程序访问音频?我没有调查太远(谷歌搜索条款java applet local policy

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

如果小程序无法加载音频文件或运行音频代码,它可能会以异常退出,但它可能值得一试。

另一个简短的页面 http://www.jensign.com/JavaScience/www/policyfiles/

于 2010-02-22T08:53:23.653 回答
1

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

Synaptic "tdb-tools" 包中的 tdbtool 命令可用于检查该文件的记录,但它不是用来编辑的,而且似乎是不可能的(除非由对脉冲代码有深入了解的人),因为所有值都是十六进制格式,不易阅读或理解。

于 2010-04-12T20:07:33.573 回答
1

我从来没有遇到过像你这样的问题,但我完全删除了pulseaudio,从那以后再也没有任何compaints。如果您想沿着这条路走下去,这里有使用 alsa 安全替换 pulseaudio 的说明。

  1. sudo apt-get purge pulseaudio gstreamer0.10-pulseaudio
  2. sudo apt-get 自动删除
  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 设置为默认值

现在,您可以随时使用 alsamixergui 来管理所有应用程序的声音。

希望能解决您的问题。

于 2010-04-13T07:14:41.903 回答
1

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

于 2010-02-20T03:24:45.837 回答