Java小程序中的静音

Java小程序中的静音,java,ubuntu,applet,audio,mute,Java,Ubuntu,Applet,Audio,Mute,我使用一个Java小程序,它会产生我不想要的声音。 小程序中的静音选项丢失,无法重写源代码。 我想听听其他(非JVM)应用程序的声音。 如何在不禁用的情况下抑制此Java小程序(或JVM)声音输出 我使用的是Ubuntu 9.10、jre1.6.0_18和Mozilla FF 3.5.8 更新: “声音首选项->应用程序”中缺少Java小程序,因为声音太短(“哔”声等) 当其他应用程序产生声音(.mp3、.ogg音乐)时,java小程序不会 可能应该是超级用户。 您可以使用脉冲音频来控制应用程序

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

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

更新:

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

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

    我想知道自定义本地安全策略是否能够阻止小程序访问音频? 我没有深入调查(谷歌搜索术语
    javaapplet本地策略

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

    另一个短页

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


    Synaptic“tdb tools”软件包中的tdbtool命令可用于检查此文件的记录,但该命令不可编辑,且似乎不可能执行(熟悉脉冲代码的人员除外)因为所有的值都是十六进制格式,不容易阅读或理解。

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

  • sudo apt获取净化脉冲音频gstreamer0.10-pulseaudio
  • sudo易于自动删除
  • sudo apt get install alsa base alsa tools alsa tools gui alsa utils alsa oss linux sound base alsa mixergui
  • sudo apt get安装esound esound客户端esound common libesd-alsa0 gnome alsamixer
  • 重新启动你的电脑
  • gstreamer属性——将ALSA设置为默认值
  • 现在,您可以始终使用alsamixergui管理所有应用程序的声音


    希望这能解决您的问题。

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


    是的,我可以用它来控制另一个应用程序,但是没有java小程序可以发出声音。这听起来更像是一个Linux配置问题,而不是一个编程问题。