Как создать отключение звука - PullRequest
5 голосов
/ 08 августа 2011

Как мне создать функцию, которая отключает звук для всего Java-приложения?

Фактически весь звук исходит из внешнего апплета, который я загружаю в приложение.

Код для загрузки апплета находится здесь: https://github.com/Tyilo/RS2Lite/blob/master/src/com/rs2lite/loader/GameAppletLoader.java

1 Ответ

5 голосов
/ 09 августа 2011

Существует Port, который дает вам доступ к микшеру компьютера, но приглушение звука отключит весь звук компьютера. Так что это, вероятно, не очень хороший вариант.

Кроме этого, я полагаю, что вам требуется экземпляр класса Clip или SourceDataLine, который в данный момент воспроизводится. Скорее всего, однако, апплет использует для воспроизведения класс AudioClip, который может использовать или не использовать клип / SourceDataLine внутри себя ...

В любом случае, вы можете попробовать следующий подход, он должен работать на большинстве реализаций Java Sound:

  • от AudioSystem, получите все микшеры

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

    убедитесь, что импортировали javax.sound.sampled. *

  • из каждого микшера, получить строки воспроизведения с помощью getSourceLines()
  • для каждой возвращаемой строки, попробуйте получить элемент управления Mute:

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

Обратите внимание, что нет гарантии, что вы получите строки, и нет гарантии, что реализация Java Sound предоставляет элемент управления MUTE для данной строки.

...