在Java Applet中静音声音

5
我使用一个Java小程序,但它会产生不必要的声音。该程序没有静音选项,也无法重新编写源代码。我想听到其他(非JVM)应用程序的声音。有什么方法可以在不禁用该程序的情况下抑制Java小程序(或JVM)的声音输出?
我使用Ubuntu 9.10、jre1.6.0_18和Mozilla FF 3.5.8。
更新:
1. “声音首选项->应用程序”中缺少Java小程序,因为声音太短(如“beep”等)。
2. 当其他应用程序产生声音(如.mp3、.ogg音乐)时,Java小程序不会发出声音。

1
这更像是一个Linux配置问题而不是一个编程问题。 - Pool
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实现。

希望对你有所帮助!


1

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


是的,我可以从那个东西控制其他应用程序,但没有 Java 小程序可以产生声音。 - INeedUrHelpRly

1

1

看起来Pulse在您的主目录(~ / .pulse /(guid)-stream-volumes.tdb)中的一个Trivial Database(tbd)文件中存储了各个应用程序的音量设置。

可从Synaptic“tdb-tools”包中使用tdbtool命令检查此文件的记录,但不建议编辑,并且似乎不可能编辑(除非有人对pulse代码非常了解),因为所有值都以十六进制格式显示,不易读取或理解。


1

我从未遇到过像你这样的问题,但是我完全删除了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 ----将ALSA设置为默认

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

希望这解决了您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接