私は、このミキサー(この場合はWindowsシステムのステレオミックス)からオーディオバイトを読み込もうとしています。プロジェクトは2つの部分で構成されています。 AudioFormatとMixer IDは、Mixerから所定の行を開くSocket(例外をスローするもの)を介して2番目のものに送信し、オーディオバイトを読み込んでサードパーティのソフトウェアに送信します。Mixer(Stereo Mix)からバイトを読み込もうとしたときにArrayIndexOutOfBoundsExceptionが発生しました
このタスクは、次のいずれか実行するコード...
try {
line = (TargetDataLine) mixer.getLine(info);
line.open(format);
int bytesRead, CHUNK_SIZE = 4096;
byte[] data = new byte[line.getBufferSize()/5];
line.start();
while (true) {
bytesRead = line.read(data, 0, CHUNK_SIZE); // Exception thrown in here.
stdout.write(data, 0, bytesRead);
stdout.flush();
}
} catch (LineUnavailableException ex) {
System.out.println("Line is unavailable.");
ex.printStackTrace();
}
そして、具体的なエラーメッセージは、次の一つです...
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 800
at com.sun.media.sound.DirectAudioDevice$DirectTDL.read(Unknown Source)
at org.Main.main(Main.java:69)
このエラーは、として私を驚くべきことです数ヶ月前に全く同じコードがテストされ、完全にバイトをstdoutを通して送信しました。
UPDATE:私は1600
を言うだろう範囲例外の16ビット1つのアウトを選択した場合インデックス800
範囲は、8ビットのAudioFormatのためです。
スタックトレースから、使用しているライブラリでエラーが発生していて、実際のコードではないようです。 – Meepo