Java 音頻處理技術簡介

Java Sound包介紹

Java sound API 比較簡單陳舊,受操做系統影響較大,沒法知足一些專業場景。好比在 windows 下8路輸入的聲卡會被識別爲4個2路輸入的設備,沒法協同工做。可是它提供了不少基礎 API,仍是頗有必要了解一下的。html

包:java

  • sampled包 聲音採樣處理
  • midi 包 midi 音樂處理

類:git

  • AudioSystem 用來操做各類系統資源,如外接的話筒,輸入等;能夠從這些設備直接獲得io 流;還能夠在各類音頻格式之間轉換。——要注意數據格式和文件格式的區別!github

  • AudioFormat 用來表示數據格式,包括編碼技術(一般是脈碼調製即 PCM),通道數,採樣率,每一個樣(敏感詞)本位數,幀速率,幀大小,字節順序編程

  • AudioFileFormat 用來表示文件格式,包括文件類型,文件長度(字節),文件中的音頻數據長度(幀),windows

  • Mixer 用來表示各類設備,做用是接收 n 錄輸入,處理後送到 n 錄輸出。oracle

  • Line 是 Port, Mixer, DataLine 的公共父接口,他們能夠對流經的信號進行控制,如gain(以分貝影響信號的體積),pan(影響聲音的左右定位,混響(這會增長聲音的混響)模擬不一樣類型的房間聲學)和採樣率(影響播放速率以及聲音間距)編碼

  • Port 簡單表示來自或到聲音設備的線spa

  • DataLine 提供與媒體相關的功能,如音頻格式,媒體位置,緩衝區大小,電平,啓停,暫停和回覆,刷新,drain,活動狀態操作系統

  • SourceDataLine 用來把數據寫入 Mixer,write()的參數表示寫入緩衝區的數據,建議每次寫入的數據大小比緩衝區大。期間若是調用 stop()會馬上中止播放,剩餘數據殘留在緩衝區,下次再調用 start()會繼續播放。

  • TargetDataLine 用來從Mixer 接收音頻數據,open()表示準備好,start()開始捕獲數據到緩衝區,read()讀取緩衝區的數據,每次讀取的數據應該比緩衝區小,好比例子中是緩衝區大小的1/5。
    綜上,兩種 line 都同樣,open/close 是控制線的程序資源;start/stop 是控制設備;write/read/flush/drain 是控制緩衝區。其中前四個方法會產生事件。

ASIO介紹

ASIO(Audio stream input output)是一種音頻流輸入輸出API,由 Steinberg 公司開發,可實現低延遲、高同步、高吞吐率。當今主流聲卡都會支持,在 windows 和 mac os 下都有驅動。參考資料中有Steinberg 公司的 ASIO SDK 下載連接,是 C++語音實現的。然而要在 Java 中調用 ASIO並不須要下載此 SDK,而是可使用開源的 JAsioHost 庫。見下一節

另外,ASIO 限制每次只能選定一個設備輸入輸出音頻,沒法支持須要多個設備同時工做的場景。這時可使用一款通用 ASIO 封裝庫 Asio4all。它底層使用 WDM API(Windows Driver Module,一種和 ASIO 相似的音頻輸入輸出 API,但只有 windows 系統支持)訪問音頻設備,對外暴露 ASIO接口。用戶能夠經過它同時訪問多臺音頻設備。

JAsioHost 庫

JAsioHost 使用 JNI 技術封裝 asio API,暴露出一套 Java API。開發者能夠直接針對此 API 編程實現音頻輸入輸出。詳細可參考項目介紹。
我在使用JAsioHost時發現給AsioDriver設置採樣率並不生效,不肯定是否bug。

綜上,若是須要用 java 同時操做多臺音頻設備,須要在本機安裝asio4all 驅動,而後基於 JAsioHost 庫編碼操做音頻設備。

順帶一提, JAsioHost API 和 Java Sound API 風格不一樣,前者主動推送數據到調用者,後者被動接受調用者調用拉取數據。所以並不能很簡單地在兩種實現方案之間切換,須要開發者作一些兼容處理。

參考資料

Java Sound官方文檔: http://docs.oracle.com/javase/tutorial/sound/TOC.html
Steinberg ASIO 驅動 官方下載: https://www.steinberg.net/en/company/developers.html
asio4all官網: http://www.asio4all.com/
JasioHost 項目主頁: https://github.com/mhroth/jasiohost

做者:搞技術的薛彬 連接:https://www.jianshu.com/p/3d27058dc377 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

相關文章
相關標籤/搜索