Ищете способ управления громкостью звука и панорамированием
Я создавал Java-проект, в котором я хотел бы, чтобы несколько звуков воспроизводились одновременно, и как контролировать громкость и панорамирование каждого звука. Я погуглил и прочитал о 3 разных путях; дело в том, что я не могу найти какие-либо учебные пособия или примеры их использования. Они есть:
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, чтобы понять эту идею, но я не смог найти ничего, представленного простым способом; поэтому, если бы кто-нибудь мог указать мне правильное направление, это было бы очень признательно.
2 ответа
Взгляните на этот след в уроках Java: " След: звук, в частности обработка звука с помощью элементов управления"
Как предложено в комментарии Эндрюса, вы должны смотреть на FloatControl.Type (PAN например).
Мне кажется, что единственная реальная опция для стереофонического микширования - это доступ к звуковым данным на уровне кадра (т. Е. Для каждого семпла). Встроенные элементы управления панорамированием и громкостью, и тому подобное, довольно сомнительны, и одновременное выполнение нескольких SourceDataLines не работает даже на некоторых ОС (в некоторых Linux).
Для этого есть два варианта: написать свой или использовать библиотеку.
Учебники по Java "Trail:Sound" слегка упоминают опцию прямого манипулирования в конце учебника "Controls". Объяснения, которые они дают, полезны для выяснения того, как получить доступ к отдельным звуковым кадрам. Изучать этот материал - большая работа, если вы входите в него впервые (и это звучит так, как если бы вы использовали AudioClips).
Я подозреваю, что лучшим вариантом для вас будет использование такой библиотеки, как TinySound. Вы можете прочитать больше об этом на Java-Gaming.org. Еще одна библиотека для изучения - JAudioLibs.
Я пишу свой собственный стереомикшер для игрового кодирования и реализовал грубую и готовую возможность управления громкостью и панорамированием. При этом я обнаружил, что Java не дает никаких гарантий в реальном времени, кроме того, что она будет пытаться поддерживать непрерывный выходной звук. Такие вещи, как сборка мусора, нарезка потоков, игра из байт-кода и памяти, все это работает против согласованности в реальном времени. См. Эту статью для более кровавых деталей: РЕАЛЬНОЕ ВРЕМЯ, АУДИО ОБРАБОТКА НИЗКОЙ ЛАТЕНЦИИ В ЯВА.
С другой стороны, базовая реализация Java (например, такие как AudioInputStream и SourceDataLine) очень мощная, и можно выполнять МНОГО обработки в реальном времени. Но это требует некоторого тщательного кодирования.