Как настроить громкость линии без использования элементов управления - PullRequest
0 голосов
/ 25 декабря 2011

Я новичок в использовании пакета javax.sound.sampled, поэтому я решил использовать этот пакет, чтобы иметь больший контроль над используемым звуком, чем некоторые более простые звуковые решения, такие как AudioClip.

Я прочитал: Учебное пособие по звуку Oracle (или хотя бы столько, сколько я мог понять), но я не вижу метода модуляции уровня / громкости воспроизведения на Line с помощьюClip интерфейс, который они, казалось, предоставляют в опциях пакета такого рода опций, которые позволяют вам создавать звук, но я не могу найти способ сделать эти настройки, будь то через мой Line или мой AudioInputStream.

Я нашел [эту] страницу с текстом

С другой стороны, поплавковые элементы управления хорошо подходят для представления непрерывно изменяемых элементов управления, таких как панорамирование, баланс,или том.

, но никакие строки на моем компьютере не возвращают никаких элементов управления (используя Line.getControls())

(я пытался заставить линию принять FloatControl.Type.VOLUME, аналогичный это но я получаю "поддержкуисключение типа элемента управления ted ")

Является ли единственный способ изменить уровень громкости на линии (используя интерфейс Clip) с помощью элементов управления Line?Или можно изменить громкость AudioInputStream?

В качестве альтернативы есть способ добавления элементов управления в существующую линию?

Ответы [ 2 ]

1 голос
/ 25 декабря 2011

Вместо использования FloatControl.Type.VOLUME используйте FloatControl.Type.MASTER_GAIN.

0 голосов
/ 09 февраля 2012

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

Таким образом, когда вы получаете буфер байтов, вы должны пройти через буфер, собирая байты, чтобы получить значения аудио. Затем умножьте на коэффициент громкости (часто с плавающей точкой от 0 до 1,0), затем разберите аудио значение обратно в байты.

Это работает. Я делаю это в сырой Java Термен вы можете попробовать. Я также манипулирую своими шагами в каждом кадре в этой программе. Но есть все еще проблемы с программой! Сейчас я работаю над улучшением способа передачи данных о событиях GUI в аудио цикл. Кроме того, я отвечаю на изменения для каждого кадра, а не для каждого буфера. Но в большинстве случаев для каждого буфера вполне подойдет.

Тем не менее, что-то, что нужно выслушать, это позаботиться об отправке изменений громкости, которые вызывают разрывы, которые могут вызвать громкие щелчки. Количество, вызывающее щелчок, может варьироваться в разных диапазонах громкости. Кроме того, громкость точно не падает линейно, так как вы переходите от 0 к 1,0 с вашим коэффициентом громкости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...