java中一个线程内的多个同时进程

时间:2018-03-03 16:02:05

标签: java multithreading audio simultaneous

我有一个应用程序可以收听四个输入音频通道(这四个通道可以来自完全不同的来源)。

我的问题是如何有效地实现这一点。起初我尝试简单地嵌套以下代码:

 try (TargetDataLine line = (TargetDataLine) m1.getLine(info1)) {
         line.open(format1);
            line.start();
对于四个频道,彼此之间

。但是,如果一个源被停止或消失,这将起作用,这将阻止所有子TargetDataLines执行。

然后我意识到想要单独控制,为每个输入创建一个线程可能更好。 (我正在使用音频缓冲区,然后进行去交错以获得所需的通道,然后转换为此数组的浮点数,然后再进行处理)。所以我开始这样做,并有四个运行代码的线程实例。 然而,这似乎使应用程序运行速度慢得多,并且另一个线程上的其他进程开始花费更长时间。 (值得注意的是,我代表传入音频通道的流量计的过程从大约需要20毫秒处理到3100毫秒才能处理!),

audioInput(String name, String audiointerface, String selectedchannel, String totalchannel ){
    threadName = name;
    interfaceName = audiointerface;
    selectedChannel = selectedchannel;
    totalChannel = totalchannel;
}

public void run(){
   synchronized (audioInputMonitor){
    System.out.println("audipInput1 Threrad is running");
    while (continuousLoop){
        while(!pauseInput){
        try {
            System.out.println("captureaudio method loading");
            captureAudio1();
            System.out.println("Finished capture method");

        } catch (ParseException ex) {
            Logger.getLogger(audioInput.class.getName()).log(Level.SEVERE, null, ex);
        } catch (LineUnavailableException ex) {
            Logger.getLogger(audioInput.class.getName()).log(Level.SEVERE, null, ex);
        }
    } 
    while (pauseInput){
        try {
             System.out.println("t is waiting"); 
             audioInputMonitor.wait();
             System.out.println("t finished waiting");
        } catch (InterruptedException ex) {
             System.out.println("Interrupted waiting");
        }
    }
}



public void start(){
    System.out.println("Starting " + threadName);
    t = new Thread (this, threadName);
    t.start();
}

然后我创建了这个线程的四个实例。 captureAudio()是一个正在运行的进程,它打开一个targetdataline,它具有给定格式,用于发送到此代码顶部的audioInput的变量。然后,该过程在连续循环上始终将流馈送到缓冲器。

理想情况下,我只想运行三个线程,我的应用程序线程,一个用于音频IO,一个用于处理数据。是否可以有一个线程,并在其中创建同时在连续循环上运行的类的四个实例?我很难看到如何有效地做到这一点。另外我开始时是正确的,需要嵌套四组起始线,一组在另一组内,以使它们保持在同一个线程中。

0 个答案:

没有答案