5

私は Java アプレットを使用していますが、これは私にとって望ましくない音を発します。アプレットのミュート オプションが欠落しており、ソース コードを書き換えることができません。他の (JVM 以外の) アプリケーションのサウンドを聞きたいです。この Java アプレット (または JVM) のサウンド出力を無効にせずに抑制するにはどうすればよいですか?

Ubuntu 9.10、jre1.6.0_18、および Mozilla FF 3.5.8 を使用しています。

アップデート:

  1. サウンドが短すぎるため (「ビープ音」など)、Java アプレットが [サウンド設定] -> [アプリケーション] にありません。
  2. 他のアプリケーションがサウンド (.mp3、.ogg 音楽) を生成すると、Java アプレットは生成しません。
4

5 に答える 5

3

アプレット(つまり、アプレットをホストしているWebページ)の展開を制御している場合は、独自のアプレットランチャーを作成できます。ランチャーは、実際のアプレットにカスタム環境を提供するラッパーとして機能します。ランチャーは実際のアプレットをインスタンス化し、カスタマイズされたバージョンのアプレット環境(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() { }
}

また、アプレットがAppletContextを取得する場所であるため、AppletStubをオーバーライドします。

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!

于 2010-04-27T17:55:05.093 に答える
1

カスタムローカルセキュリティポリシーでアプレットによるオーディオへのアクセスを停止できるかどうか疑問に思っていますか?私はそれを遠くまで調査しませんでした(Googleの用語java applet local policy

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

アプレットがオーディオファイルのロードまたはオーディオコードの実行に失敗した場合、アプレットはおそらく例外を除いて終了しますが、試してみる価値があるかもしれません。

別の短いページ http://www.jensign.com/JavaScience/www/policyfiles/

于 2010-02-22T08:53:23.653 に答える
1

あなたのような問題に遭遇したことはありませんが、pulseaudio を完全に削除して以来、苦情はありません。その道をたどりたい場合に備えて、pulseaudio を alsa に安全に置き換えるための手順を次に示します。

  1. sudo apt-get パージ pulseaudio gstreamer0.10-pulseaudio
  2. sudo apt-get 自動削除
  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 を使用してすべてのアプリのサウンドを管理できるようになりました。

問題が解決することを願っています。

于 2010-04-13T07:14:41.903 に答える
1

Pulse は、個々のアプリケーションの音量設定をホーム ディレクトリの Trivial Database (tbd) ファイルに保存しているようです:(~/.pulse/(guid)-stream-volumes.tdb)

Synaptic の「tdb-tools」パッケージの tdbtool コマンドを使用して、このファイルの記録を調べることができますが、編集することを意図したものではなく、(パルス コードに詳しい人を除いて) 編集できないようです。すべての値は 16 進形式であり、簡単に読み取ったり理解したりすることはできません。

于 2010-04-12T20:07:33.573 に答える
1

おそらくパワーユーザーである必要があります。パルス オーディオを使用してアプリケーションのサウンドを制御できます (無効にしていない場合)。これはサウンド設定にあるはずです。ボリュームアプレットを右クリックして、設定を開き、アプリケーションタブをクリックします。

于 2010-02-20T03:24:45.837 に答える