У меня есть поток, где я читаю данные из TargetDataLine (микрофон) и записываю его в ByteArrayOutputStream. У меня есть небольшой «таймер», потому что я хочу записать звук в течение 10 мс, а затем передать захваченные данные другому объекту. Пока никаких проблем, этот код захватывает звук в течение 10 мс и передает данные. Но иногда цикл while принимает ~ 130 мс ... Кто-нибудь, кто знает, почему это происходит? Вот мой код:Java: время на чтение звука из TargetDataLine и запись в ByteArrayOutPutStream разные иногда
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
}
}
'read()': считывает байты данных из этого входного потока. Этот метод ** блокирует **, если вход еще не доступен. – NINCOMPOOP
Спасибо за ваш ответ. Это может быть, но возможно, что нет никаких входных данных при захвате аудио? На мой взгляд, в целевой строке данных есть вход EVERYTIME, так что этого не может быть, или? – Phil123