2010-02-20 19 views
5

Ich benutze ein Java-Applet, das unerwünschte Sounds für mich produziert. Mute-Option im Applet fehlt und es ist nicht möglich, den Quellcode neu zu schreiben. Ich möchte andere (nicht JVM) Anwendungen Sounds hören. Wie unterdrücke ich diese Soundausgabe des Java-Applets (oder JVM), ohne sie zu deaktivieren?Mute Sound in Java Applet

Ich benutze Ubuntu 9.10, jre1.6.0_18 und Mozilla FF 3.5.8.

UPDATE:

  1. Java-Applet wird in "Sound Einstellungen-> Anwendungen" fehlt, weil Töne zu kurz sind ("Piep" etc.).
  2. Wenn eine andere Anwendung Töne erzeugt (.mp3, .ogg Musik) nicht Java Applet nicht.
+1

Das klingt eher nach einer Linux-Konfigurationsfrage als nach einer Programmierfrage. – Pool

Antwort

1

wahrscheinlich sollte in Power-Benutzer sein. Sie können das Pulssignal verwenden, um Anwendungsgeräusche zu steuern (vorausgesetzt, Sie haben es nicht deaktiviert) sollte es in Sound-Einstellungen sein. Klicken Sie mit der rechten Maustaste auf das Volumen-Applet und öffnen Sie die Einstellungen, klicken Sie auf den Anwendungs-Tab.

+0

Ja, ich kann ANDERE Anwendungen von diesem Ding steuern, aber es gibt kein Java-Applet, das Töne produziert. – INeedUrHelpRly

1

Ich frage mich, ob eine benutzerdefinierte lokale Sicherheitsrichtlinie das Applet vom Zugriff auf Audio stoppen kann? Ich habe es nicht weit untersuchen (gegoogelt die Bedingungen java applet local policy)

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

Das Applet würde wahrscheinlich Ausgang mit einer Ausnahme, wenn es nicht um die Audiodatei laden oder den Audiocode ausgeführt wird, aber es könnte einen Wert sein Schuss.

Eine weitere kurze Seite http://www.jensign.com/JavaScience/www/policyfiles/

1

es, dass Pulse speichert die Lautstärke-Einstellungen für einzelne Anwendungen in einer Trivial Database (tbd) Datei in Ihrem Home-Verzeichnis erscheint: (~/.pulse/(GUID) -Strom-Volumen .tdb)

Der Befehl tdbtool aus dem synaptischen "tdb-tools" -Paket kann verwendet werden, um die Datensätze dieser Datei zu überprüfen, aber es ist nicht zur Bearbeitung gedacht und scheint nicht möglich zu sein (außer von jemandem mit intimen Kenntnis des Pulscodes), weil alle Werte im Hex-Format vorliegen und nicht leicht lesbar oder verständlich sind.

1

Ich habe noch nie ein Problem wie deins kennengelernt, aber ich habe Pulseaudio komplett entfernt und habe seither keine Compaints mehr. Für den Fall, dass Sie diesen Pfad gehen möchten, hier sind Anweisungen zum sicheren Ersetzen von Pulseaudio durch alsa.

  1. sudo apt-get purge Pulseaudio gstreamer0.10-Pulseaudio
  2. sudo apt-get autoremove
  3. sudo apt-get alsa-base alsa-tools alsa-tools-gui alsa-utils alsa-oss installieren linux-sound-base alsamixergui
  4. sudo apt-get installieren esound esound-clients esound-common libesd-alsa0 gnome-alsamixer
  5. Starten Sie Ihren Computer neu!
  6. GStreamer-Eigenschaften ---- ALSA eingestellt

nun auf die Standard Sie immer alsamixergui Sound für alle Anwendungen verwalten können.

Hoffnung, die Ihr Problem löst.

3

Wenn Sie die Bereitstellung des Applets steuern (z. B. die Webseite, die das Applet hostet), könnten Sie Ihren eigenen Applet Launcher schreiben. Der Launcher fungiert als Wrapper, der dem eigentlichen Applet eine benutzerdefinierte Umgebung zur Verfügung stellt. Der Launcher instanziiert das echte Applet und übergibt ihm angepasste Versionen der Applet-Umgebung (AppletStub, AppletContext). Die benutzerdefinierte Umgebung implementiert AudioClip als eine "nichts tun" -Schnittstelle.

Audio zu deaktivieren, können Sie den Applet wie dies außer Kraft setzen:

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() { } 
} 

Wir auch AppletStub außer Kraft setzen, da dies ist, wo das Applet die Applet von

class CustomAppletStub implements AppletStub 
{ 
    AppletStub realStub; 

    public AppletContext getAppletContext() 
    { 
     return new CustomAppletContext(realStub.getAppletContext()); 
    } 
} 

bekommt Und dann Launchers :

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)); 
    } 
} 

Es sieht aus wie eine Menge Code, aber es ist wirklich nur af ew Klassen und meist Verdrahtung, nur um eine neue DummyAudioClip-Implementierung zu injizieren.

HTH!