5

Javaアプリケーション全体のミュートを切り替える関数を作成するにはどうすればよいですか?

実際、すべてのサウンドは、アプリケーションにロードした外部アプレットから発生します。

アプレットをロードするためのコードはここにあります:https ://github.com/Tyilo/RS2Lite/blob/master/src/com/rs2lite/loader/GameAppletLoader.java

4

1 に答える 1

5

コンピューターのミキサーにアクセスできるものがありますが、Portそこでサウンドをミュートすると、コンピューターのすべてのサウンドがミュートされます。したがって、それはおそらく良い選択肢ではありません。

それ以外に、現在再生されているClipまたはSourceDataLineのクラスインスタンスが必要だと思います。ただし、おそらく、アプレットは再生にアプレットのAudioClipクラスを使用します。これは、内部でClip/SourceDataLineを使用する場合と使用しない場合があります...

とにかく、次のアプローチを試すことができます。ほとんどのJavaSound実装で機能するはずです。

  • AudioSystemから、すべてのミキサーを入手

    Mixer.Info[] infos = AudioSystem.getMixerInfo();
    for (Mixer.Info info: infos) {
        Mixer mixer = AudioSystem.getMixer(info);
    }
    

    必ずjavax.sound.sampled。*をインポートしてください

  • 各ミキサーから、次のコマンドで再生ラインを取得します getSourceLines()
  • 返された行ごとに、ミュートコントロールを取得してみてください。

    BooleanControl bc = (BooleanControl) line.getControl(BooleanControl.Type.MUTE)
    if (bc != null) {
        bc.setValue(true); // true to mute the line, false to unmute
    }
    

行を取得する保証はなく、JavaSound実装が特定の行にMUTEコントロールを提供する保証もないことに注意してください。

于 2011-08-09T10:48:33.447 に答える