[英]Java Gervill Software Synth not working
在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的音頻數據。 難道我做錯了什么? 還是從JDK 8開始棄用Gervill?
似乎我找到了答案。 您必須從AudioInputStream讀取數據幀的整數倍,否則它將始終返回零。 在我的情況下,讀取4個字節解決了該問題,因為AudioFormat為16位(2個字節),2個通道,因此為4個字節/幀。
更改
byte[] b = new byte[2]
至
byte[] b = new byte[4]
實際上,任何4的整數倍都可以工作。 4、8、12、16、20等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.