2010-02-20 3 views
5

J'utilise une applet Java qui produit des sons indésirables. Il manque l'option Mute dans l'applet et il n'est pas possible de réécrire le code source. Je souhaite entendre d'autres sons d'applications (non-JVM). Comment supprimer cette sortie de l'applet Java (ou JVM) sans la désactiver? J'utilise Ubuntu 9.10, jre1.6.0_18 et Mozilla FF 3.5.8.Désactiver le son dans Java Applet

MISE À JOUR:

  1. applet Java est manquant dans "son Préférences-> Applications", car les sons sont trop courts ("bip", etc.).
  2. Lorsqu'une autre application produit des sons (.mp3, musique .ogg), l'applet Java ne le fait pas.
+1

Cela ressemble plus à une question de configuration Linux qu'à une question de programmation. – Pool

Répondre

1

probablement devrait être dans l'utilisateur avec pouvoir. Vous pouvez utiliser le son pulsé pour contrôler les sons des applications (en supposant que vous ne l'ayez pas désactivé) il devrait être dans les préférences sonores. faites un clic droit sur l'applet de volume et ouvrez les préférences cliquez sur l'onglet application.

+0

Oui, je peux contrôler AUTRES applications à partir de cette chose, mais il n'y a pas d'applet Java qui produit des sons. – INeedUrHelpRly

1

Je me demande si une politique de sécurité locale personnalisée peut empêcher l'applet d'accéder à l'audio? Je n'ai pas investigué ce jour (googlé les termes java applet local policy)

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

L'applet serait probablement sortie à l'exception si elle échoue le chargement du fichier audio ou l'exécution du code audio, mais il pourrait être utile d'un coup.

Une autre courte page http://www.jensign.com/JavaScience/www/policyfiles/

1

Il semble que Pulse stocke les paramètres de volume pour les applications individuelles dans un fichier de base de données Trivial (TBD) dans votre répertoire personnel: (~/.pulse/(guid) -stream volumes La commande tdbtool du paquet Synaptic "tdb-tools" peut être utilisée pour inspecter les enregistrements de ce fichier, mais elle n'est pas destinée à être éditée et ne semble pas possible (sauf par quelqu'un avec intime connaissance du code d'impulsion) car toutes les valeurs sont au format hexadécimal et ne sont pas facilement lisibles ou comprises.

1

Je n'ai jamais rencontré de problème comme le vôtre, mais j'ai complètement supprimé pulseaudio et je n'ai jamais eu de problème depuis. Dans le cas, vous voulez descendre ce chemin, voici les instructions pour remplacer en toute sécurité pulseaudio avec alsa.

  1. sudo apt-get purge PulseAudio gstreamer0.10-pulseaudio
  2. sudo apt-get autoremove
  3. sudo apt-get install alsa-base alsa-outils alsa-tools-alsa-utils IUG alsa-oss linux-sound-base alsamixergui
  4. sudo apt-get installer esound-esound-clients esound-common libesd-alsa0 gnome-alsamixer
  5. Redémarrez votre ordinateur!
  6. GStreamer-propriétés ---- VALIDER ALSA par défaut

Maintenant, vous pouvez toujours utiliser alsamixergui pour gérer son pour toutes les applications.

Espérons que cela résout votre problème.

3

Si vous contrôlez le déploiement de l'applet (c'est-à-dire la page Web hébergeant l'applet), vous pouvez écrire votre propre lanceur d'applets. Le lanceur fonctionne comme un wrapper qui fournit un environnement personnalisé à l'applet elle-même. Le lanceur instancie l'applet réelle et lui transmet des versions personnalisées de l'environnement de l'applet (AppletStub, AppletContext.) L'environnement personnalisé implémente AudioClip en tant qu'interface «ne rien faire».

Pour désactiver l'audio, vous pourriez remplacer le AppletContext comme ceci:

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

Nous remplaçons également AppletStub, car c'est là le Applet obtient le AppletContext de

class CustomAppletStub implements AppletStub 
{ 
    AppletStub realStub; 

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

Et puis, votre lanceur :

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

Il ressemble à beaucoup de code, mais c'est vraiment juste ew classes et surtout le câblage juste pour injecter une nouvelle implémentation DummyAudioClip.

HTH!