Вы можете попробовать использовать элементы управления, предоставленные в javax.sound.sampled, учебник здесь , но мне никогда не удавалось с ними повезти. По моему опыту, если они существуют для данной системы (зависит от ПК / ОС), проблемы все еще остаются, поскольку изменения объема происходят только на границах буфера.
Обратите внимание, что в самой последней части руководства предлагается непосредственное управление звуком. Для этого требуется несколько шагов.
1) получить отдельные байты звукового файла
Пример этого кода приведен в следующем уроке по Использование файлов и преобразователей формата , раздел «Чтение звуковых файлов». В этом примере кода обратите внимание на точку, где у нас есть комментарий, отмечающий точку, где был предоставлен доступ к отдельным байтам:
// Here, do something useful with the audio data that's
// now in the audioBytes array...
2) Конвертировать байты в PCM (зависит от формата аудио)
3) умножить на коэффициент объема
4) увеличить или уменьшить коэффициент (если он исчезает)
5) преобразовать PCM обратно в байты
6) упаковывать и отправлять через SourceDataLine (опять же, зависит от аудио формата)
Все шаги были описаны ранее более подробно в StackOverflow и должны быть доступны для поиска, хотя я не знаю, насколько легко будет найти их в этот момент.
Есть пара бесплатных библиотек, которые позволяют в реальном времени уменьшать громкость. Я написал AudioCue для этого (и частоту в реальном времени и панорамирование), а также есть TinySound .
PS Я с удовольствием отвечу на вопросы и приму предложения по улучшению презентации для библиотеки, которую я написал.