繁体   English   中英

Java Applet中的静音

[英]Mute sound in Java Applet

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

我使用的是Ubuntu 9.10,jre1.6.0_18和Mozilla FF 3.5.8。

更新:

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

如果您控制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!

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

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

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

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

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

Pulse似乎将各个应用程序的卷设置存储在主目录中的Trivial Database(tbd)文件中:(〜/ .pulse /(guid)-stream-volumes.tdb)

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

我从来没有遇到像你这样的问题,但我完全删除了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设置为默认值

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

希望能解决你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM