Застрял с Java Sound API - PullRequest
0 голосов
/ 04 мая 2020

В образовательных целях я хочу снять звук с микрофона и воспроизвести его. Но когда я выполняю свой код, он записывается в течение примерно 6-8 секунд, а затем молчит 6-8 секунд. Когда я экспортирую аудио как файл .raw и загружаю его в Audacity, я слышу только тихий белый шум. Пожалуйста, помогите мне.

OpenJDK 11, PulseAudio, Arch Linux, Realtek, KDE

public static void main(String[] args) throws LineUnavailableException, IOException {
    System.out.println("RECORDING");
    AudioFormat format = new AudioFormat(8000, 8, 1, true, false);
    TargetDataLine microphone = AudioSystem.getTargetDataLine(format);
    microphone.open(format);
    byte[] buffer = new byte[(int) format.getSampleRate() * format.getFrameSize()];
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    microphone.start();
    int bytesRead;
    while (outputStream.size() < 100000) {
        bytesRead = microphone.read(buffer, 0, buffer.length);
        outputStream.write(buffer, 0, bytesRead);
    }
    microphone.stop();
    microphone.close();

    System.out.println("PLAYING");
    byte[] audio = outputStream.toByteArray();
    ByteArrayInputStream inputStream = new ByteArrayInputStream(audio);
    AudioInputStream ais = new AudioInputStream(inputStream, format, audio.length);
    SourceDataLine speaker = AudioSystem.getSourceDataLine(format);
    speaker.open(format);
    speaker.start();
    while ((bytesRead = ais.read(buffer, 0, buffer.length)) != -1) {
        speaker.write(buffer, 0, bytesRead);
    }
    speaker.drain();
    speaker.close();
    speaker.stop();
}

Любая помощь будет высоко ценится.

...