В настоящее время я пишу скетч обработки, которому требуется доступ к нескольким аудиовходам, но обработка позволяет получить доступ только к строке по умолчанию. Я пытался получить линии прямо из микшера Java (доступ к ним осуществляется в рамках обработки), но я все еще получаю только сигнал из какой строки в настоящее время установлено значение по умолчанию на моей машине.
Я начал рассматривать отправку звука через OSC из SuperCollider, как рекомендовано здесь. Однако, поскольку я очень новичок в SuperCollider, а их документация и поддержка больше сосредоточены на создании звука, чем на доступе к входным данным, моим следующим шагом, вероятно, будет игра с Beads и Jack, как было предложено здесь.
Есть ли у кого-нибудь (1) другие предложения или (2) конкретные примеры получения нескольких входных данных от SuperCollider или Beads/Jack для обработки?
Заранее спасибо!
Редактировать: звук будет использоваться для включения пользовательских визуализаций музыки (подумайте о визуализаторе iTunes, но гораздо более специфичном для песни). У нас это работает с несколькими mp3; теперь мне нужно получить буфер float[] с каждого микрофона. Мы надеемся иметь 9 разных микрофонов, хотя мы сойдемся на 4, если это будет более выполнимо.
Что касается оборудования, на данный момент мы используем только микрофоны и кабели XLR-USB. (Рассматривал предварительный усилитель, но пока этого было достаточно.) В настоящее время я использую Windows, но думаю, что в конечном итоге мы перейдем на Mac.
Вот моя попытка с одними бусами (для ноутбука он отлично работает, так как я делаю это первым, но в буфере гарнитуры все 0; если я переключу их и сначала поставлю гарнитуру, буфер гарнитуры будет правильным, но ноутбук будет содержать все 0):
void setup() {
size(512, 400);
JavaSoundAudioIO headsetAudioIO = new JavaSoundAudioIO();
JavaSoundAudioIO laptopAudioIO = new JavaSoundAudioIO();
headsetAudioIO.selectMixer(5);
headsetAudioCon = new AudioContext(headsetAudioIO);
laptopAudioIO.selectMixer(4);
laptopAudioCon = new AudioContext(laptopAudioIO);
headsetMic = headsetAudioCon.getAudioInput();
laptopMic = headsetAudioCon.getAudioInput();
} // setup()
void draw() {
background(100,0, 75);
laptopMic.start();
laptopMic.calculateBuffer();
laptopBuffer = laptopMic.getOutBuffer(0);
for (int j = 0; j < laptopBuffer.length - 1; j++)
{
println("laptop; " + j + ": " + laptopBuffer[j]);
line(j, 200+laptopBuffer[j]*50, j+1, 200+laptopBuffer[j+1]*50);
}
laptopMic.kill();
headsetMic.start();
headsetMic.calculateBuffer();
headsetBuffer = headsetMic.getOutBuffer(0);
for (int j = 0; j < headsetBuffer.length - 1; j++)
{
println("headset; " + j + ": " + headsetBuffer[j]);
line(j, 50+headsetBuffer[j]*50, j+1, 50+headsetBuffer[j+1]*50);
}
headsetMic.kill();
} // draw()
Моя попытка добавить Джека содержит эту строку:
ac = new AudioContext(new AudioServerIO.Jack(), 44100, new IOAudioFormat(44100, 16, 4, 4));
но я получаю сообщение об ошибке:
Jun 22, 2016 9:17:24 PM org.jaudiolibs.beads.AudioServerIO$1 run
SEVERE: null
org.jaudiolibs.jnajack.JackException: Can't find native library
at org.jaudiolibs.jnajack.Jack.getInstance(Jack.java:428)
at org.jaudiolibs.audioservers.jack.JackAudioServer.initialise(JackAudioServer.java:102)
at org.jaudiolibs.audioservers.jack.JackAudioServer.run(JackAudioServer.java:86)
at org.jaudiolibs.beads.AudioServerIO$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.UnsatisfiedLinkError: Unable to load library 'jack': Native library (win32-x86-64/jack.dll) not found in resource path ([file:/C:/Users/...etc...)
И когда я нахожусь в Джеке, я не вижу своего микрофона (что кажется мне огромным красным флажком, хотя я совершенно не знаком с Джеком). Должен ли этот AudioContext отображаться как вход в Jack? Или наоборот — сначала найти там мой микрофон, а потом передать его от Джека в Processing?
(Простите мою неопытность и еще раз спасибо! Недостаток знаний о Джеке заставляет меня задуматься, не стоит ли мне вместо этого вернуться к SuperCollider...)