Как сэмплировать многоканальный звук на Java

Я понял, что это может быть относительно ниша, но, может быть, поэтому все равно стоит спросить. Я смотрю на аппаратную консоль записи с несколькими входами (например, Alesis IO 26), чтобы взять 8-канальный вход Adat lightpipe для обработки сигналов. Поскольку я еще не приобрел устройство и должен выяснить, возможно ли это (бюджетные проблемы), я хотел бы спросить, есть ли у кого-нибудь опыт использования всех этих 8 входов для данных в Java? Я видел множество примеров записи звука с использованием библиотек Javax.sound.sampled, но я не смог найти никакой информации по многоканальным каналам, которая превышает 2. Что меня интересует, так это сэмплирование восьми каналов отдельных людей в качестве моноисточника для выполнить несколько простых DSP на них. Будет ли аппаратное устройство рассматриваться как один микшер? А 8 каналов будут представлены как 8 строк? Я надеюсь, что я понял мою терминологию правильно.

Я был бы признателен, если бы кто-то мог указать мне любую соответствующую информацию. Спасибо!

4 ответа

Решение

Предполагается, что многоканальный звук возможен в Java в зависимости от используемой версии Java, платформы, на которой вы работаете, и типа используемой звуковой карты. Смотрите отличный Java Audio Faq для более подробной информации. Я никогда не был в состоянии использовать это надежно на всех платформах.

Если вы действительно хотите создать надежный многоканальный звук, я бы порекомендовал использовать C API, например PortAudio, Juce или PulseAudio.

Мне повезло с PortAudio и Juce.

Чтобы использовать их в Java, вам необходимо создать интерфейс JNI для API C.

Это, очевидно, больше работы, чем просто использование javax.sound, но это дает вам гораздо больший контроль над аудиооборудованием, которое вы используете. По моему опыту работы с аудиоустройствами, слишком удаленное от аппаратного обеспечения (то есть 4 уровня абстракции вместо 2) часто лишает вас возможности делать серьезный многоканальный звук с высокой битовой глубиной и высокой частотой дискретизации.

Я реализовал нечто подобное с картами Terratec, каскадными для 32 входов, единственной библиотекой в ​​то время была Jsyn.

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

http://www.softsynth.com/jsyn

Я не уверен, что есть что-то еще, что может помочь.

Я только что добавил оболочку Java JNI для PortAudio. План состоит в том, чтобы сохранить это вместе с источником PortAudio. PortAudio поддерживает многоканальное аудио, где N>2.

Сегодня, 9/3/12, JPortAudio все еще находится в альфа-режиме. К тому времени, когда вы прочитаете это, оно может быть стабильным.

http://www.portaudio.com/docs/v19-doxydocs/java_binding.html

Я не могу дать вам ответ непосредственно о том, работает ли API javax.sound с несколькими каналами (но в соответствии с документацией API это должно быть).

Тем не менее, я пошел другим путем для обработки многоканального звука с Java, который может работать и для вас. Я использовал Jack (Jack Audio Connection Kit) для направления сигналов от и на аудиоустройство, а затем в библиотеку JJack для обработки сигналов. Вы не упомянули свою целевую ОС. Я успешно использовал этот подход под Linux. AFAIR был порт Windows для Джека в пути.

чао, вяз

Другие вопросы по тегам