Java 硬件麦克风控制

Java 硬件麦克风控制,java,javasound,Java,Javasound,如何使用java代码控制麦克风开关功能?我需要控制麦克风打开的时间。 我尝试在java中使用以下代码: final AudioFormat format = getFormat();//getformat() has the audio format DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); final TargetDataLine line = (TargetDataLine)

如何使用java代码控制麦克风开关功能?我需要控制麦克风打开的时间。 我尝试在java中使用以下代码:

final AudioFormat format = getFormat();//getformat() has the audio format
    DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
    final TargetDataLine line   = (TargetDataLine) AudioSystem.getLine(info);

    line.open(format);                         //open mic for input
line.start();
    byte[] buffer = new byte[1048576];
OutputStream out = new ByteArrayOutputStream();//output the audio to buffer
boolean running = true;

    try {
        while (running) {
        int count = line.read(buffer, 0, buffer.length);
        running=false;
            if (count > 0) {
            out.write(buffer, 0, count);               
            }
        }
            out.close();                             

    } catch (IOException e) {
    System.out.println("Error");
        System.err.println("I/O problems: " + e);
        System.exit(-1);
          }
但这基本上取决于缓冲区的大小。而while循环每次可以输入30秒的音频。 我只需要在10秒钟内采集样本输入。
有什么帮助吗??谢谢。

您似乎试图通过缓冲区的大小来控制麦克风的持续时间。我敢肯定这不是常见的做法。通常使用一个只有几分之一秒大小的缓冲区(以保持较低的延迟),并重复遍历它。要控制开放式读取或播放操作的持续时间,更常见的做法是更改“running”布尔值

因此,从循环外部,代码更新“正在运行”的布尔值,当循环注意到有停止请求时,读取循环结束

我不知道如何获得打开或不打开麦克风的许可。我知道java声音教程会讨论这个问题


在他们的示例中,他们使用一个布尔“stopped”来控制何时结束录制循环。

要更快地获得更好的帮助,请发布一个。另外,请对代码块使用一致的逻辑缩进。明白了。。谢谢……:)假设我在一个较小的缓冲区中通过麦克风接收数据流。我需要处理这些数据以找到频率。但是,当我处理数据时,是否有一种方法可以使麦克风保持打开状态并继续接收另一组数据?如果处理速度快,您可能可以在while循环中完成。或者,您可以将输出定向到另一行和线程,在该行和线程中同时进行分析。通常,上面的代码会在它自己的线程中,这样就不会阻止其他活动。由于FFT,处理时间相当长。。我会做第二个选择。。谢谢……)