2017-06-18 1 views
0

JDK8では、SoftSynthesizerで作成されたAudioInputStreamから有用なデータが得られないようです。Java GervillソフトウェアSynthが動作しない

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

私は答えを見つけたようです。 AudioInputStreamからデータのフレームの整数倍​​を正確に読み取る必要があります。そうでない場合は、常にゼロが返されます。私のケースでは、AudioFormatは16ビット(2バイト)、2チャンネルなので、4バイトを読み取ると問題が解決したので、4バイト/フレームです。

変化

byte[] b = new byte[2] 

byte[] b = new byte[4] 

実際に

に、4の任意の整数倍で動作します。 4,8,12,16,20など

関連する問題