Audio 在处理过程中获取多个音频输入

Audio 在处理过程中获取多个音频输入,audio,processing,jack,minim,supercollider,Audio,Processing,Jack,Minim,Supercollider,我目前正在编写一个处理草图,需要访问多个音频输入,但处理只允许访问中的默认行。我已经尝试直接从Java混频器(在Processing中访问)获取行,但是我仍然只从当前在我的机器上设置为默认的行中获取信号 我已经开始考虑按照建议,通过OSC从超级对撞机发送声音。然而,由于我是超级对撞机的新手,他们的文档和支持更侧重于生成声音,而不是访问输入,因此我的下一步可能是按照建议玩珠子和插孔 是否有人有(1)其他建议,或(2)从超级对撞机或珠子/插孔获取多个输入以进行处理的具体示例 提前谢谢你 编辑:声音将

我目前正在编写一个处理草图,需要访问多个音频输入,但处理只允许访问中的默认行。我已经尝试直接从Java混频器(在Processing中访问)获取行,但是我仍然只从当前在我的机器上设置为默认的行中获取信号

我已经开始考虑按照建议,通过OSC从超级对撞机发送声音。然而,由于我是超级对撞机的新手,他们的文档和支持更侧重于生成声音,而不是访问输入,因此我的下一步可能是按照建议玩珠子和插孔

是否有人有(1)其他建议,或(2)从超级对撞机或珠子/插孔获取多个输入以进行处理的具体示例

提前谢谢你

编辑:声音将用于定制音乐可视化功能(想想iTunes可视化工具,但更具体的歌曲)。我们有多个MP3的工作;现在我需要的是能够从每个麦克风获得一个float[]缓冲区。希望有9个不同的话筒,但如果可行的话,我们会选择4个

对于硬件,目前我们只使用麦克风和卡侬到USB电缆。(我已经考虑过前置放大器,但到目前为止这已经足够了。)我目前使用的是Windows,但我认为我们最终会改用Mac

这是我用珠子做的尝试(对于笔记本电脑来说效果很好,因为我先做一个,但是耳机缓冲区有所有0;如果我切换它们并将耳机放在第一位,耳机缓冲区将是正确的,但是笔记本电脑将包含所有0):

但我得到了一个错误:

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来说是全新的)。这个音频上下文是否应该作为输入显示在Jack中?或者反之亦然——先在那里找到我的麦克风,然后从杰克那里拿到


(请原谅我的经验不足,再次感谢您!我对Jack缺乏了解,这让我想知道是否应该重新访问Supercellider…

几年前我也遇到过同样的问题,我使用了Jack、JNAJack和Beads的组合。您可以按照此了解更多详细信息

当时我不得不使用(2012-04-23),但我希望这些更改现在可能已经成为主要项目

以下是我使用的基本类,仅供参考:

import java.util.Arrays;

import org.jaudiolibs.beads.AudioServerIO;

import net.beadsproject.beads.analysis.featureextractors.FFT;
import net.beadsproject.beads.analysis.featureextractors.PowerSpectrum;
import net.beadsproject.beads.analysis.segmenters.ShortFrameSegmenter;
import net.beadsproject.beads.core.AudioContext;
import net.beadsproject.beads.core.AudioIO;
import net.beadsproject.beads.core.UGen;
import net.beadsproject.beads.ugens.Gain;
import processing.core.PApplet;


public class BeadsJNA extends PApplet {

    AudioContext ac;
    ShortFrameSegmenter sfs;
    PowerSpectrum ps;

    public void setup(){
        //defining audio context with 6 inputs and 6 outputs - adjust this based on your sound card / JACK setup
        ac = new AudioContext(new AudioServerIO.Jack(),512,AudioContext.defaultAudioFormat(6,6));

        //getting 4 audio inputs (channels 1,2,3,4)
        UGen microphoneIn = ac.getAudioInput(new int[]{1,2,3,4});
        Gain g = new Gain(ac, 1, 0.5f);
        g.addInput(microphoneIn);
        ac.out.addInput(g);

        println("no. of inputs:  " + ac.getAudioInput().getOuts()); 

        //test get some FFT power spectrum data form the 
        sfs = new ShortFrameSegmenter(ac);
        sfs.addInput(ac.out);
        FFT fft = new FFT();
        sfs.addListener(fft);
        ps = new PowerSpectrum();
        fft.addListener(ps);
        ac.out.addDependent(sfs);

        ac.start();
    }
    public void draw(){
        background(255);
        float[] features = ps.getFeatures();
        if(features != null){
            for(int x = 0; x < width; x++){
              int featureIndex = (x * features.length) / width;
              int barHeight = Math.min((int)(features[featureIndex] *
                                                height), height - 1);
              line(x, height, x, height - barHeight);
            } 
        }
    }

    public static void main(String[] args) {
        PApplet.main(BeadsJNA.class.getSimpleName());
    }

}
导入java.util.array;
导入org.jaudiolibs.beads.AudioServerIO;
导入net.beadsproject.beads.analysis.featureextractors.FFT;
导入net.beadsproject.beads.analysis.featureextractors.PowerSpectrum;
导入net.beadsproject.beads.analysis.segmenters.ShortFrameSegmenter;
导入net.beadsproject.beads.core.AudioContext;
导入net.beadsproject.beads.core.AudioIO;
导入net.beadsproject.beads.core.UGen;
导入net.beadsproject.beads.ugens.Gain;
导入处理.core.PApplet;
公共类BeadsJNA扩展了PApplet{
音频背景ac;
短帧分段器sfs;
功率谱;
公共作废设置(){
//定义具有6个输入和6个输出的音频上下文-根据声卡/插孔设置进行调整
ac=新的AudioContext(新的AudioServerIO.Jack(),512,AudioContext.defaultAudioFormat(6,6));
//获取4个音频输入(通道1、2、3、4)
UGen microphoneIn=ac.getAudioInput(新的int[]{1,2,3,4});
增益g=新增益(ac,1,0.5f);
g、 附加输入(麦克风输入);
交流输出附加输入(g);
println(“输入数量:+ac.getAudioInput().getOuts());
//测试得到一些FFT功率谱数据
sfs=新的短帧分段器(ac);
sfs附加输入(ac.out);
FFT=新的FFT();
sfs.addListener(fft);
ps=新的功率谱();
fft.addListener(ps);
ac.out.addDependent(sfs);
ac.start();
}
公众抽签(){
背景(255);
float[]features=ps.getFeatures();
如果(功能!=null){
对于(int x=0;x
您能否提供更多的上下文(例如,您将如何处理传入的音频)、有关您正在使用的硬件的一些信息,以及可能显示您已经尝试过的代码示例?@mbaytas扩展了文章内容,包括有关项目和当前硬件的信息,并添加了代码示例。谢谢!遇到上面的“找不到本机库”错误。可能是JNA或JNAJack的问题?我曾尝试将jna.jar添加到sketch的code文件夹中,并将org\jaudiolibs\jnajack放入Processing的libraries文件夹中。当时我使用eclipse,因为它更容易处理所有主要采用纯java格式的库(而不使用Processing library文件夹结构)。你能改用eclipse吗?@Aemilia我已经上传了我以前的eclipse项目。您应该能够解压它并在eclipse中导入它。确保Jack正在运行,输入按需路由。默认情况下,它将在第26行查找1个音频输入。您可以根据第25行(尝试使用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...)
import java.util.Arrays;

import org.jaudiolibs.beads.AudioServerIO;

import net.beadsproject.beads.analysis.featureextractors.FFT;
import net.beadsproject.beads.analysis.featureextractors.PowerSpectrum;
import net.beadsproject.beads.analysis.segmenters.ShortFrameSegmenter;
import net.beadsproject.beads.core.AudioContext;
import net.beadsproject.beads.core.AudioIO;
import net.beadsproject.beads.core.UGen;
import net.beadsproject.beads.ugens.Gain;
import processing.core.PApplet;


public class BeadsJNA extends PApplet {

    AudioContext ac;
    ShortFrameSegmenter sfs;
    PowerSpectrum ps;

    public void setup(){
        //defining audio context with 6 inputs and 6 outputs - adjust this based on your sound card / JACK setup
        ac = new AudioContext(new AudioServerIO.Jack(),512,AudioContext.defaultAudioFormat(6,6));

        //getting 4 audio inputs (channels 1,2,3,4)
        UGen microphoneIn = ac.getAudioInput(new int[]{1,2,3,4});
        Gain g = new Gain(ac, 1, 0.5f);
        g.addInput(microphoneIn);
        ac.out.addInput(g);

        println("no. of inputs:  " + ac.getAudioInput().getOuts()); 

        //test get some FFT power spectrum data form the 
        sfs = new ShortFrameSegmenter(ac);
        sfs.addInput(ac.out);
        FFT fft = new FFT();
        sfs.addListener(fft);
        ps = new PowerSpectrum();
        fft.addListener(ps);
        ac.out.addDependent(sfs);

        ac.start();
    }
    public void draw(){
        background(255);
        float[] features = ps.getFeatures();
        if(features != null){
            for(int x = 0; x < width; x++){
              int featureIndex = (x * features.length) / width;
              int barHeight = Math.min((int)(features[featureIndex] *
                                                height), height - 1);
              line(x, height, x, height - barHeight);
            } 
        }
    }

    public static void main(String[] args) {
        PApplet.main(BeadsJNA.class.getSimpleName());
    }

}