我使用了一个 Java 小程序,它对我产生了不想要的声音。小程序中缺少静音选项,无法重写源代码。我想听听其他(非 JVM)应用程序的声音。如何在不禁用它的情况下抑制这个 Java 小程序(或 JVM)声音输出?
我正在使用 Ubuntu 9.10、jre1.6.0_18 和 Mozilla FF 3.5.8。
更新:
- “声音首选项->应用程序”中缺少 Java 小程序,因为声音太短(“哔”等)。
- 当其他应用程序产生声音(.mp3、.ogg 音乐)时,java 小程序不会。
如果您可以控制小程序的部署(即托管小程序的网页),您可以编写自己的小程序启动器。启动器用作为实际小程序提供自定义环境的包装器。启动器实例化真正的小程序并将定制版本的小程序环境(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 applet local policy
)
http://www.wutka.com/hackingjava/ch3.htm#CreatingaCustomizedSecurityManager
如果小程序无法加载音频文件或运行音频代码,它可能会以异常退出,但它可能值得一试。
另一个简短的页面 http://www.jensign.com/JavaScience/www/policyfiles/
Pulse 似乎将各个应用程序的音量设置存储在您主目录中的普通数据库 (tbd) 文件中:(~/.pulse/(guid)-stream-volumes.tdb)
Synaptic "tdb-tools" 包中的 tdbtool 命令可用于检查该文件的记录,但它不是用来编辑的,而且似乎是不可能的(除非由对脉冲代码有深入了解的人),因为所有值都是十六进制格式,不易阅读或理解。
我从来没有遇到过像你这样的问题,但我完全删除了pulseaudio,从那以后再也没有任何compaints。如果您想沿着这条路走下去,这里有使用 alsa 安全替换 pulseaudio 的说明。
现在,您可以随时使用 alsamixergui 来管理所有应用程序的声音。
希望能解决您的问题。
可能应该是高级用户。您可以使用脉冲音频来控制应用程序的声音(假设您没有禁用它)它应该在声音首选项中。右键单击音量小程序并打开首选项单击应用程序选项卡。