Java Gervill Software Synth не работает

В JDK8 я не могу получить какие-либо полезные данные из AudioInputStream, созданного SoftSynthesizer.

    AudioSynthesizer s = new SoftSynthesizer();

    AudioFormat format = new AudioFormat(44100, 16, 2, true, false);
    AudioInputStream stream = s.openStream(format, null);

    s.getChannels()[0].noteOn(60, 100);

    while (stream.available() >= 0) {
        byte[] b = new byte[2];
        stream.read(b);
        System.out.println(b[0] << 8 | b[1]);
    }

    s.getChannels()[0].noteOff(60);

Однако println() показывает только 0, аудиоданные не поступают из AudioInputStream. Я делаю что-то неправильно? Или Gervill считается устаревшим с JDK 8?

1 ответ

Кажется, я нашел ответ. Вы должны прочитать ровно целое, кратное количество кадров данных из AudioInputStream, иначе он всегда будет возвращать ноль. В моем случае чтение 4 байтов решило проблему, так как AudioFormat - 16 бит (2 байта), 2 канала, то есть 4 байта / кадр.

менять

byte[] b = new byte[2]

в

byte[] b = new byte[4]

Фактически, любое целое число, кратное 4, будет работать. 4, 8, 12, 16, 20 и т. Д.

Другие вопросы по тегам