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

艾米利亚

我当前正在编写一个需要访问多个音频输入的Processing草图,但是Processing只允许访问默认的行。我试图直接从Java Mixer(在Processing中访问)获得Lines,但是我仍然只能获得信号从当前在我的计算机上设置为默认值的那一行开始。

我已经开始考虑按照此处的建议通过SuperCollider通过OSC发送声音然而,因为我很新的SuperCollider和它们的文档和支持,更侧重于产生的声音比上访问输入,我的下一步可能会是玩弄珠和杰克,作为建议在这里

是否有人有(1)其他建议,或(2)从SuperCollider或Beads / Jack获得多个输入以进行处理的具体示例?

先感谢您!

编辑:声音将用于增强自定义音乐的可视化效果(请考虑使用iTunes可视化工具,但更多针对歌曲)。我们可以处理多个mp3;现在我需要的是能够从每个麦克风中获取一个float []缓冲区。希望有9种不同的麦克风,但如果可行的话,我们将选择4种。

对于硬件,此时,我们仅使用麦克风和XLR到USB电缆。(已经考虑过前置放大器,但到目前为止已经足够了。)我目前在Windows上,但是我认为我们最终会切换到Mac。

这是我仅用Beads进行的尝试(因为我首先这样做是因为它首先在一个笔记本上工作,但是耳机缓冲区全为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...)

当我在杰克的时候,我看不到我的麦克风(对我来说,这似乎是一个巨大的危险信号,尽管我对杰克是完全陌生的)。该AudioContext是否应该显示为Jack中的输入?反之亦然-先在那儿找到我的麦克风,然后再将其从Jack拿到Processing吗?

(请原谅我的经验不足,再次感谢您!我对Jack的了解不足,使我想知道是否应该重新访问SuperCollider ...)

乔治·普罗芬扎

几年前,我遇到了同样的问题,并且结合使用了JACK,JNAJack和Beads。您可以按照此Beads Google网上论坛主题获取更多详细信息。

当时我必须使用此版本的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());
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

批处理-从用户输入中获取多个参数

来自分类Dev

如何在Matlab中实时处理多个麦克风输入音频流

来自分类Dev

无法从输入流中获取音频输入流

来自分类Dev

处理对象中的多个输入值更改

来自分类Dev

在Python中处理多个输入值

来自分类Dev

在MVC中处理多个多文件输入

来自分类Dev

在pydev中输入提示以获取多个参数

来自分类Dev

Javascript:从选择输入中获取多个值

来自分类Dev

SQL查询以从多个输入中获取ID

来自分类Dev

在 POST 请求中获取多个输入字段

来自分类Dev

如何使用音频单元 osx 从设备音频输入获取音频

来自分类Dev

处理多个表单输入

来自分类Dev

具有处理和音频输入的NullPointerException

来自分类Dev

具有处理和音频输入的NullPointerException

来自分类Dev

处理来自移动麦克风的音频输入而不将其保存到文件中

来自分类Dev

统一和音频:如何处理多个音频

来自分类Dev

Windows批处理中对多个输入提示的回答

来自分类Dev

如何通过React中的单个组件处理多个输入字段

来自分类Dev

有什么办法可以处理xslt中的多个输入xml?

来自分类Dev

如何处理javaFX8中的多个Textfield输入?

来自分类Dev

在jQuery中处理多个ID并仅更新相同ID的输入

来自分类Dev

在React.js中处理多个输入值

来自分类Dev

处理多个获取操作

来自分类Dev

从用户获取多个输入

来自分类Dev

如何使用 HTML 获取用户输入以在 JS 中处理?

来自分类Dev

使用getFloatFrequencyData和实时输入无法获取Web音频中的频率数据

来自分类Dev

处理多个文件输入的值

来自分类Dev

从具有相同类的多个输入标签中获取html

Related 相关文章

热门标签

归档