Настройка громкости с помощью java

Добрый день!

Я разрабатываю приложение, которое воспроизводит MIDI. Он отлично работает, но я часто получаю отчеты о квази-ошибках: "нет звука playd". Ответ всегда - войти в контроллер громкости и включить звук синтезатора (не отключать его).

Вопрос в том, как изменить его автоматически - с помощью программного обеспечения? До сих пор я могу только изменить мастер-громкость, и я ни на что не мог найти, как изменить только для "волнового" синтезатора SW и т.д....

Я вообще ищу платформенные независимые решения (чистая java), однако решение только для Windows (все виды окон) также приветствуется;) Спасибо вам заранее!

Edit: Ну, смотря на ответы, я вижу, я должен уточнить свой вопрос. Я добавляю изображение. Элемент управления, выбранный зеленым, - это то, что я уже могу сделать (например, связанный с Cliff), но мне нужно что-то для элементов управления в красном (самое главное в моем случае - третий слева) - объем синтезатора. Изображение взято из win XP, но другие операционные системы (linux также) имеют аналогичные элементы управления. Java должна иметь такую ​​возможность. alt text

Ответ 1

Я посмотрел в Ubuntu, Fedora и Windows, и единственными общими чертами в этих ОС являются громкость главного тома и громкость (или звуковой сигнал в Windows). Это заставляет меня думать, что нет никакого независимого от платформы способа сделать это, а это не означает стандартного Java-способа.

При этом наиболее вероятные API (вероятно, разные) для всех этих ОС, которые позволяют вам управлять этими настройками более тонкого зерна. Если это так, почти наверняка потребуются отдельные библиотеки Java для взаимодействия с этими API на каждой платформе.

Извините, я не могу указать вам в правильном направлении, но я надеюсь хотя бы помочь вам исключить возможность стандартного способа выполнения этой функции. Удачи!

Ответ 2

Попробуйте заглянуть в то, что происходит в фоновом режиме при настройке уровней волны/синтезатора с помощью инструмента на скриншоте, используя sysinternal Process Monitor и то ваш код Java будет выполнять один и тот же собственный вызов системы/dll.

Ответ 3

Работаете ли вы с каким-то интерфейсом или используете системный по умолчанию Mixer? И о каком уровне контроля вы говорите? К сожалению, я тоже изучаю этот API, но, по-моему, каждый из них будет другой линией, не так ли? Вы пытались получить все системные строки и использовать MASTER_GAIN на каждой из строк? Как человек выше меня сказал, что я уверен, что для этого есть API, но если я собираюсь сделать это в своем коде для образовательных целей или что-то, что я начну. Говоря об API, существует управляющий API, который управляет самими аудиоданными, но насколько я знаю, это не влияет на аппаратный контроль громкости.