我目前正在编写一个需要访问多个音频输入的处理草图,但处理只允许访问默认线路。我尝试直接从 Java 混合器获取线路(在处理中访问),但我仍然只获得信号从我的机器上当前设置为默认值的那一行开始。
我已经开始考虑按照建议通过 OSC 从 SuperCollider 发送声音here。然而,由于我对 SuperCollider 非常陌生,而且他们的文档和支持更侧重于生成声音而不是访问输入,所以我的下一步可能是按照建议使用 Beads 和 Jackhere.
有没有人有 (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()
我尝试添加 Jack 包含以下行:
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...)
当我在 Jack 中时,我看不到我的麦克风(这对我来说似乎是一个巨大的危险信号,尽管我对 Jack 完全陌生)。此 AudioContext 是否应该显示为 Jack 中的输入?或者反之亦然——先在那里找到我的麦克风,然后将其从 Jack 处获取到Processing?
(请原谅我的经验不足,再次感谢您!我对 Jack 的了解不足让我想知道是否应该重新访问 SuperCollider...)