Ищете способ контролировать громкость звука и панорамирование

Я создавал проект Java, в котором я хотел бы, чтобы несколько звуков воспроизводились одновременно, и как управлять громкостью и панорамированием каждого звука. Я погуглил и прочитал о трех разных способах; дело в том, что я не могу найти никаких руководств или примеров того, как их использовать. Они есть:

 import java.applet.AudioClip;
 import javax.sound.sampled;
 import sun.audio.SomethingOrOther; // Sorry, don't recall off-hand.  It was an "un-documented" site

Продолжая читать, я обнаружил, что AudioClip предназначен только для определенного типа приложений («апплетов»?), а третий упоминается только на одном из сотни сайтов. Второй был поднят на этом сайте, но он касался совсем другой темы (что-то о "линиях"). Во всяком случае, я достаточно знаком с синтаксисом Java, чтобы понять идею, но я не смог найти ничего, что было бы представлено прямолинейно; поэтому, если бы кто-нибудь мог указать мне в правильном направлении, это было бы очень признательно.


person user2403876    schedule 28.06.2013    source источник
comment
Нет необходимости добавлять основной тег в заголовок.   -  person Andrew Thompson    schedule 28.06.2013
comment
Это может иметь или не иметь значение: jsresources.org   -  person Bjorn Roche    schedule 28.06.2013


Ответы (2)


Взгляните на этот след в учебниках по Java: Trail: Sound, в частности, обработка аудио с элементами управления

Как было предложено в комментарии Эндрюса, вы должны посмотреть FloatControl.Type (например, PAN).

person jpw    schedule 28.06.2013

Мне кажется, что единственный реальный вариант стереомикширования — это доступ к звуковым данным на уровне кадра (т. е. на уровне семпла). Встроенные элементы управления панорамированием, громкостью и т. д. вызывают сомнения, а наличие нескольких одновременно выполняемых SourceDataLines даже не будет работать в некоторых ОС (в некоторых Linux).

Для этого есть два варианта: написать свой или использовать библиотеку.

Учебники по Java "Trail:Sound" слегка упоминают опцию прямого манипулирования в конце руководства "Элементы управления". Объяснения, которые они дают, ПОЛЕЗНЫ для выяснения того, как получить доступ к отдельным звуковым кадрам. Это большая работа, чтобы изучить этот материал, если вы впервые сталкиваетесь с этим (и это звучит так, если вы используете AudioClips).

Я подозреваю, что лучшим вариантом для вас будет использование такой библиотеки, как TinySound. Подробнее об этом можно прочитать на странице Java-Gaming.org Другая библиотека для изучения — JAudioLibs.

Я пишу свой собственный стереомикшер для кодирования игр и реализовал грубую возможность управления громкостью и панорамированием. При этом я обнаружил, что Java не дает никаких гарантий реального времени, кроме того, что он будет пытаться поддерживать непрерывный вывод звука. Такие вещи, как сборка мусора, нарезка потоков, воспроизведение из байт-кода по сравнению с памятью, — все эти вещи работают против согласованности в реальном времени. Подробнее см. в этой статье: ОБРАБОТКА АУДИО В РЕАЛЬНОМ ВРЕМЕНИ С МАЛОЙ ЗАДЕРЖКОЙ В JAVA.

С положительной стороны, основная реализация Java (например, такие вещи, как AudioInputStream и SourceDataLine) очень мощная, и можно выполнять МНОГО операций в реальном времени. Но это требует осторожного кодирования.

person Phil Freihofner    schedule 28.06.2013