I'm trying to detect the silence in order to stop recording the audio from a mic. My current code is:
public byte[] getRecord() throws AudioException {
    try {
        // Reset the flag
        stopped = false;
        // Start a new thread to wait during listening
        Thread stopper = new Thread(() -> {
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                br.readLine();
                stopped = true;
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            stop();
        });
        // Start the thread that can stop the record
        stopper.start();
        return record();
    } catch (Exception e) {
        throw new LineUnavailableException("Unable to record your voice", e);
    }
}
private byte[] record() throws LineUnavailableException {
    AudioFormat format = AudioUtil.getAudioFormat(audioConf);
    DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
    // Checks if system supports the data line
    if (!AudioSystem.isLineSupported(info)) {
        return null;
    }
    microphone = (TargetDataLine) AudioSystem.getLine(info);
    microphone.open(format);
    microphone.start();
    System.out.println("Listening, tap enter to stop ...");
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    int numBytesRead;
    byte[] data = new byte[microphone.getBufferSize() / 5];
    // Begin audio capture.
    microphone.start();
    // Here, stopped is a global boolean set by another thread.
    while (!stopped) {
        // Read the next chunk of data from the TargetDataLine.
        numBytesRead = microphone.read(data, 0, data.length);
        // Save this chunk of data.
        byteArrayOutputStream.write(data, 0, numBytesRead);
    }
    return byteArrayOutputStream.toByteArray();
}
At the moment I stop the recording using a shell but I'd like to know how I can stop it in the while loop.
