Есть еще один способ, кроме использования строк. (У меня также были проблемы с получением контрольной линии, и я обнаружил, что линия Мастера сработала, как рекомендовано Трэвисом Мейерсом. Я даю ему + голос.) Не уверен, что вы хотите туда попасть, но можно умножить КАЖДЫЙ кадр аудио значения коэффициентом громкости. Учебник по Java содержит краткую ссылку на эту технику, но, как и многое другое в этом документе, они не предоставляют явных примеров.
Таким образом, когда вы получаете буфер байтов, вы должны пройти через буфер, собирая байты, чтобы получить значения аудио. Затем умножьте на коэффициент громкости (часто с плавающей точкой от 0 до 1,0), затем разберите аудио значение обратно в байты.
Это работает. Я делаю это в сырой Java Термен вы можете попробовать. Я также манипулирую своими шагами в каждом кадре в этой программе. Но есть все еще проблемы с программой! Сейчас я работаю над улучшением способа передачи данных о событиях GUI в аудио цикл. Кроме того, я отвечаю на изменения для каждого кадра, а не для каждого буфера. Но в большинстве случаев для каждого буфера вполне подойдет.
Тем не менее, что-то, что нужно выслушать, это позаботиться об отправке изменений громкости, которые вызывают разрывы, которые могут вызвать громкие щелчки. Количество, вызывающее щелчок, может варьироваться в разных диапазонах громкости. Кроме того, громкость точно не падает линейно, так как вы переходите от 0 к 1,0 с вашим коэффициентом громкости.