簡體   English   中英

Java Sound API:記錄和監視相同的輸入源

[英]Java Sound API: Recording and monitoring same input source

我試圖按照示例從麥克風錄制到wav文件。 同時,我需要能夠測試輸入水平/音量,並在輸入水平/音量太低時發送警報。 我已經嘗試了此鏈接中描述的內容,並且看起來工作正常。

嘗試使用一個TargetDataLine同時記錄和讀取字節時會出現問題(跳過用於監視的讀取字節進行記錄,反之亦然)。

另一件事是這些過程很長(可能需要數小時),因此應考慮內存使用情況。

我應該如何進行? 有什么辦法克隆TargetDataLine嗎? 我可以在用AudioSystem.write()寫入時緩沖多個字節嗎? 還有其他方法可以在不填充系統內存的情況下寫入.wav文件嗎?

謝謝!

如果使用TargetDataLine來捕獲音頻(類似於Java教程中給出的示例) ,則可以訪問名為“數據”的字節數組。 您可以遍歷此數組以測試音量水平,然后再輸出。

要進行音量測試,您必須將字節轉換為某種有意義的PCM數據。 例如,如果格式是16位立體聲little-endian,則可能需要兩個字節,然后組裝為有符號的short或有符號的標准化浮點,然后進行測試。


對於在發布“解決方案”之前沒有仔細查看您的示例,我深表歉意。

我建議您擴展InputStream ,制作一個也執行音量測​​試的自定義版本。 重寫“ read”方法,以便它從測試卷的代碼中獲取返回的字節。 您必須修改卷測試代碼以按字節工作並傳遞所需的字節。

在為output-to-wav階段創建AudioInputStream時,您應該能夠將此擴展InputStream用作參數。

我已經使用這種方法通過兩個數據源成功保存了音頻:一次來自預先填充的數組,一次來自通過我編寫的“混合器”的流音頻混合,以結合音頻數據源。 后者將更像您需要執行的操作。 不過,我還沒有從麥克風來源做到這一點。 但是據我所知,同樣的方法應該行得通。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM