在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开始被弃用了吗?
答案 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等