TargetDataLine (マイク) からデータを読み取り、それを ByteArrayOutputStream に書き込むスレッドがあります。10ミリ秒の音を録音してから、キャプチャしたデータを別のオブジェクトに渡したいので、小さな「タイマー」があります。これまでのところ問題はありません。このコードは 10 ミリ秒のオーディオをキャプチャし、データを渡します。しかし、while ループに 130 ミリ秒かかることもあります...なぜこれが起こるのか知っている人はいますか? これが私のコードです:
while (true) {
byte tempBuffer[] = new byte[2];
try {
byteArrayOutputStream = new ByteArrayOutputStream();
start = System.nanoTime();
double recording = System.nanoTime();
// Get microphone input
while (System.nanoTime() - start <= 10 * 1000000) {
int count = targetDataLine.read(tempBuffer, 0,
tempBuffer.length);
if (count > 0) {
byteArrayOutputStream.write(tempBuffer, 0, count);
}
}
byteArrayOutputStream.close();
LLCapturedData.push(byteArrayOutputStream.toByteArray());
byteArrayOutputStream.flush();
// Tell observers, that input is captured
setChanged();
notifyObservers();
} catch (Exception e) {
// TODO
}
}