我有一個線程在那裏我從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 2013-04-24 09:02:23
感謝您的回答。這可能是,但是捕捉音頻時可能沒有任何輸入可用。在我看來,在目標數據行中輸入EVERYTIME,所以這不可能,或者? – Phil123 2013-04-24 09:07:06