Java Gervill Software Synth无法正常工作

时间:2017-06-18 13:55:42

标签: java audio javax.sound.midi gervill

在JDK8中,我似乎无法从SoftSynthesizer创建的AudioInputStream中获取任何有用的数据。

    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 个答案:

答案 0 :(得分:0)

似乎我找到了答案。你必须准确读取AudioInputStream中数据帧的整数倍,否则它将始终返回零。在我的例子中,读取4个字节解决了问题,因为AudioFormat是16位(2字节),2个通道,所以它是4个字节/帧。

变化

byte[] b = new byte[2]

byte[] b = new byte[4]

实际上,任何4的整数倍都可以。 4,8,12,16,20等