2013-11-28 97 views
1

所以,我一直在做一個寵物項目一段時間,我終於完成了所有的工作...大部分。我的項目代碼已經在JAVA audio data streaming 0s(請原諒我忘記開始我的TargetDataLine xp)。我的問題更具理論性,可能會被解釋爲「使用更低級別的語言」,但我很好奇是否有辦法在Java中使用它。以我的代碼設置synchronously的方式,我的音頻數據的讀取/寫入之間存在一個延遲,這個延遲隨緩衝區大小而變化,我想知道是否有方法來流式傳輸音頻(最好從TargetDataLine)延遲時間最短,這樣一首歌或其他相對較高質量的聲音就可以被認出。我的邏輯是:通過TargetDataLine流實時音頻

while (Stream.RENDERING_BUFFER.isOpen()) { 
    int readLength = Stream.PROCESSING_BUFFER.read(Stream.READ_BUFFER, 0, Stream.BUFFER_SIZE); 
    Stream.RENDERING_BUFFER.write(Stream.READ_BUFFER, 0, readLength); 
} 

謝謝!

+0

*「JAVA:通過TargetDataLine流實時音頻」* 1)不需要在標題中包含主標籤。 2)它是'Java',而不是'JAVA'。 3)你的*問題*? –

+0

1&2)對不起,我看到有人曾這樣做過。認爲它可能是自定義的。 3)我有一種方法可以將音頻(最好是來自TargetDataLine)以最小的延遲進行流式傳輸,以便歌曲或其他相對較高質量的聲音可以被可視地播放出來? – Kyle

+0

對不起,我沒有足夠的說明。我將音頻數據從麥克風輸入傳輸到揚聲器輸出。 – Kyle

回答

2

SourceDataLine是非常低的水平。它依賴於Java適應的每個操作系統的本地代碼實現。

減少延遲的主要方法是減小緩衝區。

還有其他與Java音頻和「實時」保證有關的問題。您可能會發現這篇感興趣的文章: Real-Time Low Latency Audio Processing in Java

+0

非常豐富,謝謝! – Kyle