發佈日期: 發佈留言

Musicha 電腦的JACK2—概論與設定初步

關於JACK音訊,它的精髓觀念來自真實硬體音訊串接,萬物皆為裝置

更新時間:4/29/2022 18:19

首先一般的Linux 電腦系統的架構是這個樣子:

其實這跟Windows 甚至 Mac 電腦的音訊機制架構沒有差很遠,因為都是「通用電腦」的設計。
各個應用軟體是各自跟Pulseaudio 連接——各軟體可以同時各自跟pulseaudio連接,pulseaudio會加以混音,然後藉由作業系統的核心Linux 的ALSA驅動,透過真實的硬體麥克風收音(record)以及透過喇叭播放(play)出聲音

但是我們的電腦算是「特種電腦」有特別的音效架構,是這個樣子:

先解說理由,因為音樂的各種製作(音樂領域,「作」音樂泛指從現場演奏到幕後混音等等)很多情境需要即時或者說低聲音延遲(從手指對演奏鍵盤觸鍵,到最終耳朵聽到播放出的樂音之反應時間)的反應回饋,以及傳統 DAW軟體內才有的音訊繞接(routing )等等諸多機能,Linux世界提出的方案,是透過JACK2 音訊系統搭配低延遲系的特製 Linux核心,變成特化的電腦作業系統。

這樣特化過的Linux 電腦,能作的事情從簡單的編曲混音到多演奏者LIVE 演奏+直播,到土砲自製錄音室,甚至一直到演唱會用的後台「即時處理機箱群」,都能辦到。可能是一台電腦,也可能是四五台電腦透過網路線,用net-jack機制結合成「一個系統」,退可守,進可攻,這是通用的電腦作業系統辦不到的。

進入正題,請看上圖,簡單說,不管哪個途徑的midi演奏訊號、audio(音訊)都被整合進JACK2。

這裡要特別要區分一下兩大類程式,如上圖一般的通用程式,是像我們常使用的mate桌面的事件通知音效(例如你按音量調整時聽到的叮鈴鈴聲音),透過瀏覽器看youtube 、 Netflix ,用mplayer、xine看DVD或藍光,或者用Steam玩電腦遊戲,使用OBS 直播等等,大部分的通用應用程式都是是使用pulseaudio 機制。

另一類則是「JACK 應用程式」,當然主要就是專業音樂程式,例如Ardour、 Zynaddsubfx、Qsynth、Helm、Hydrogen 等等。當然在Linux上,我們如果新發現一個專業音樂程式,我們一定很關心:它支援JACK嗎?

一開始的心理建設:
在JACK的接線盤世界裡,看到的每個軟、硬體,請把它們都當成是真實世界的
一個「裝置」來看待

在音訊方面:

  • 一般應用程式是接pulseaudio,程式之間的音訊不能互相連接,我們系統是透過pulseaudio 轉接器把一般音樂程式的聲音轉進 jack音訊系統。這樣平常使用很方便,不過在進行低延遲收音的時候,pulseaudio 有可能會對系統低延遲產生一點負面影響,在超低延遲收音時,視情況可以暫時關閉pulseaudio橋接器。(你也不希望收音到一半突然「叮咚」 XD )
  • 更舊時代(超過10年以上的設計)的程式是直接使用ALSA的,會造成搶音效硬體的獨占問題,為了保留相容性,我們電腦上的配置,這樣的程式會自動接到ALSA 音訊橋接器,然後轉接進入到JACK2
  • JACK應用程式的話當然就是出現在JACK「接線盤」裡面(以後我們會專篇介紹到)。主要都是專業音樂程式,不過也有少數多媒體程式也使用JACK。然後這些程式啟動時,有可能不會自動連接,也有可能自動連接到系統輸出入(System capture playback /System capture),而且不同的 JACK應用程式間的音訊可以彼此串連,可以是串接不同的獨立效果器,可以是從一個DAW軟體的某一音軌,透過JACK接到另一個DAW軟體的另外一軌,讓不同DAW之間截長補短等等,更進一步有些JACK 應用程式支援”JACK transport” (主要都是DAW 系軟體),這會讓不同的音樂軟體在播放/錄製聲音時同步,你可以想像類似Logic 、Reason、Pro Tools同步連動那樣(甚至是跨機兩台電腦上),有點像是那樣的感覺,而不需要在一個DAW內做完事情,匯出檔案,過帶到另外一個DAW繼續做事。

ps. 有的JACK應用程式雖然會自動連接到系統音訊的輸出入,雖然方便不過也不一定是好事,例如軟體電吉他綜合效果器—Rakarrack會自動接你的”system capture”,如果你沒有接外接音效界面時,這個”system capture”就是你筆電的收音麥克風了,如果你上次使用完沒有按其「Fx on」按鈕關閉Fx,這一次啟動,就會直接是” Fx on”的狀態,然後從你筆電的mic到喇叭間就會瞬間產生超巨大迴授嚇到一堆人 XD (緊急解法,趕快本能性把一個耳機插入耳機孔,或者記得趕快按那個按鈕)

另外在midi方面:

  • JACK midi:多半新一代的JACK應用軟體會走JACK midi,然後midi訊號也可以串連,例如可以一個實體MIDI鍵盤控制複數的軟體音源器+硬體音源器,當然,也可以是兩個MIDI鍵盤連接到同一個軟體音源器(例如說你要用兩個25鍵的小鍵盤,設在不同的八度,組合成一個 50鍵的MIDI鍵盤)
  • alsa midi:比較舊式的軟體會走alsa midi,然後音訊卻是走 JACK音訊。相容性的關係,我們一樣有alsa midi的橋接器轉接進JACK機制裡面。理論上JACK midi的延遲會比alsa midi低一些些,如果一個軟體可以設定走JACK midi或者alsa midi,建議是jack midi為佳

說到這裡,是不是開始感覺到JACK的神奇呢?以前在Windows、 Mac上,想要用理論上電腦可以辦到的該有機能,但是被既有套裝軟體限制住了,現在似乎可以自行達成? 😛

JACK管理前端

在我們Musicha電腦的預設MATE桌面上的右下角(圖中框起來的地方),我們把管理JACK 的幾個重要前端程式都整理在此。

這次我們要先講Cadence 。 Cadence跟Qjckctl 都可以設定、啟動、停止JACK2 音訊系統,不過我們Musicha電腦的規劃就只有使用Qjckctl 的「JACK接線盤」機制,就不特別講使用 Qjckctl 如何啟動/停止JACK2。

Cadence可以說是 KXStudio (整理各種音樂製作軟體與環境的大包裝之團隊)最重要的軟體。在System分頁,我們大致上可以分4個地方(圖上有標示的1 2 3 4 )來看

JACK伺服器的核心使用,就是SSP——
Stop、Start、PulseAudio橋接器重啟
三部曲

  1. JACK實體,其實叫做一個”server”(伺服器) ,這個伺服器啟動以後,就獨占了音效硬體。當我們在調整各種設定完以後,想要讓新設定生效,就會需要關閉(Stop)然後start(啟動),或者Force Restart(強制重啟動,但是建議平常不要直接用這個)。簡單說,初期你最常需要用到的就是Start Stop Configure這三個按鈕。這邊要特別注意,前面提到JACK 是走「類似實體硬體器材」的思維,所以要Stop或者Force Restart時,一定要先關閉所有的JACK應用程式,再關閉JACK這個「機器」,不然會造成你的音樂專案出現麻煩的問題,甚至有些JACK應用軟體如Ardour 發現JACK死掉了,就會自動接管ALSA而獨占之(然後你就無法重啟 JACK了),所以為了避免混亂,在你的工作流程的第一步,就要確定JACK的設定。
  2. 在操作JACK伺服器的啟動關閉或設定改來改去前
    • 要留意你開機的Linux Kernel是不是low latency(低延遲)、RT(realtime 即時),另外我們筆電比較新的機種都改配Liquorix 的特別調校低延遲核心,由於它的名稱內沒有”lowlatency”,Cadence會誤判,別擔心,Liquorix 可以正常使用JACK2。
    • 如果你開機的核心是generic(通用)或者(mx)等等,就是一般的核心,那就表示無法進行穩定的低延遲音訊作業,block latency在20ms以下是會破音的,建議調到 20ms以上。
    • CPU scaling governor(CPU頻率調整管理)雖然沒顯示,但是請在MATE桌面右下角有個CPU頻率跳動的那個小applet 按一下,那邊可以調整,作音樂時最好是用Performance 或者Ondemand 模式
  3. JACK伺服器重啟以後,系統預設不會自動帶起Pulseaudio 橋接器的(一般桌面系統音訊、一般程式都會變啞巴),所以記得去按Pulseaudio 分頁,重啟Pulseaudio 橋接器,一般的軟體與桌面音訊就會恢復。這個快速檢驗方法就是按Fn+F5/6 調整音量,聽提示音有沒有出現
  4. 這個區塊有JACK server當前的最新狀態:
    • Server status:現在JACK伺服器是啟動的嗎?
    • 有realtime嗎:其實realtime跟lowlatency幾乎同義,當然realtime是比lowlatency更「精實」一點
    • DSP Loading:數位音訊訊號處理的負載程度,如果是使用內建音效晶片的話,這個數值是綜合CPU、RAM存取速度、內建音效晶片的綜合運算覆載,當你跑越多的軟體音源或是越低延遲,負載就會越重
    • Xrun:來不及「算音」,發生破音的次數。這個數值如果是在啟動某軟體或者系統開機的過程中,增加幾個Xruns 算是正常的。但如果是在音樂軟體運作的過程中,Xrun快速累加(你應該也會聽到聲音怪怪的),這時要考慮降載,例如減少使用的軟體音源機、效果器,或者把當前專案進度儲存,關閉所有JACK應用軟體,然後停止JACK伺服器,把buffer 調大(latency也變大)再重啟JACK伺服器,繼續作業
    • Buffer size:這就是前述的buffer(音效運算的緩衝區),緩衝區越小,延遲越低,反之越大
    • Sampling rate:取樣頻率,一般來說普通的專案,例如以軟 /硬體midi音源為主的專案,48000hz算很夠用,如果需要處理高規格的真實收音,才需要到96000以及以上的取樣頻率
    • Block Latency:電腦系統內的粗估延遲(實際上會再多一點)’server synchronous’ mode

JACK伺服器的設定

我的音效界面是幾輸出幾輸入?

容許的最低延遲極限是多少?

buffer 越小,延遲越低,越是考驗硬體能耐

一開始我們已經題到了設定的大方向,就是音效界面/內建音效接面的輸出入有幾道(音訊硬體世界的觀念,一道或說一軌,就是一個mono 單音,立體聲 stereo= mono 1 、mono 2) 以及最低延遲極限。在Cadence的System分頁按下configure,會彈出一個對話窗,Engine分頁可暫時不管,只要記得裡面的Advanced – Server Synchronous Mode ,這個選項對於降低音訊latency 有相當幫助(但是某些狀況可能會讓使用舊式ALSA音訊的軟體發生崩潰),我們預設不開,留給大家自己測試看看。

接下來我們要提到在driver(驅動程式)分頁的設定關鍵四步驟(圖上有標示的1 2 3 4 ):

  1. Driver:沒有意外,就是用ALSA——使用本機或者接在本機的實體音效硬體,這個不用改,不過切記,如果你按了其他分頁但沒有真的要使用,在按右下角的OK按鈕離開前,記得按回ALSA,讓ALSA分頁顯示出來(不然會變成選擇其他驅動),再按”OK”完成設定。其他驅動也順便解說一下:
    • Dummy:空裝置,有時候你想要把你的電腦變成一個網路電台伺服機,例如用做youtube上的長時間音樂直播頻道(類似 Lofi Girl那樣)——喇叭不需要真的發出聲音,一切的聲音都是電腦內部的運算,那你就可以選擇這個模式
    • loopback:迴環,這個是謎樣的驅動….聲音送出去就自動回來的裝置??有空的時候你可以研究看看它能幹麻喔 😛
    • NET/NETONE:這就是跟netjack有關係,讓兩台以上的電腦透過網路(最好是在內網+用網路線連接),以netJACK就可以合成為「一體」,而且音訊一樣保持低延遲、可以 JACK transport 同步。軟體音源、效果系就可以分散在不同電腦上運算,由一台主控機調用。這個議題以後我們會另外專文講解。
  2. 你的硬體裝置要用哪一個?這邊…
    1. 我們預設是Duplex Mode(雙工模式),意思是你可以專用一個音效硬體只輸入(input device),而另一個音效硬體作為輸出裝置(output device)。比方說現在很流行 USB麥克風,其實就是一個沒有輸出孔但整合了麥克風的USB音效界面或者說是「USB音效卡」,它本體無法發出聲音,所以我們就可以把input device設成它,然後Output device設成筆電內建的音效晶片ALC293 Analog(類比輸出)
    2. 筆電內建晶片除了類比輸出外,還有HDMI 系列,那個要留意 HDMI 0 、1、 2 等等,是指你的HDMI埠、mini-DP埠、Thunderbolt3或4等(是的,實際處理上是變成HDMI訊號),這個我們筆電每一型的對應編號略有差異
    3. channels:這個「頻道」其實就是指你的音效硬體有幾軌輸入或者幾輸出(一軌是指一個mono 單音,想成電吉他導線就對啦),這就要留意看你的音效界面硬體的規格書,他有幾軌輸入、輸出呢?數字要正確喔。
  3. 這個區塊就是控制低延遲的程度buffer 越小,延遲越低,越是考驗硬體能耐(DSP loading)
    • Sample Rate:音訊的取樣頻率,基本上作音樂導向,會是特定倍數,也就是48000 96000 192000 ,選擇什麼,JACK伺服器啟動以後,所有的音樂軟體就會真的以這個為基礎進行「聲響運算」。選擇的方向跟你音樂產出(包含演奏出)的品質有關,如何決定呢? 取樣頻率需要高於一段樂音之最高頻率的兩倍時,才能把那個頻率還原出來人耳可以聽到的聲音頻率極限是20Khz也就是20000hz(其實這個頻段只有一些「空氣感」了),兩倍就是40000hz,也就是說48000hz的選擇可以完全收錄。不過為什麼會有96000以上的選擇?因為後來發現在真實世界的收音上,在20Khz以上的頻率,還有更多的…嗯「空氣感」或說「環境感」,有收到音的話會有更多的莫名的「感覺」。說回來,簡單說,這跟實體收音的專案比較有關係,如果你是純虛擬樂器的專案或者你沒有要錄什麼山谷的環境音、百人天籟大合唱、XX幾重奏之類的,是不太需要考慮96000以上
    • Buffer size、 Period/Buffers:這兩個參數與與取樣頻率會一起決定JACK的latency為多少
      • Buffer size:緩衝區大小,意思是1秒能處理幾「格」(buffer= frames/ period),特別要注意的,buffer size這個欄位其實可以自己輸入數字,不一定只能選固定的128 256那些喔
      • Period/Buffers:這是「一個緩衝區分配到多少處理時間」?
    • JACK 音訊的理論latency 公式跟 Engine分頁有無勾選Synchronous Mode而有不同
      • 有勾,也就是同步模式:Buffer size*Period/Buffers /取樣頻率(khz)=延遲幾ms(1000ms = 1秒)
      • 沒有勾,也就是非同步模式:Buffer size*(Period/Buffers +1 ) /取樣頻率(khz)=延遲幾ms (這是JACK2特有狀況,參考
    • dithering mode:高取樣頻率的數位音訊資料在降轉成低取樣頻率,例如96000hz轉換成48000時,直接轉換會在數位「邊緣」的地方發生「裁切」,造成不必要的失真不自然的情況,會需要在轉換完加入抖動( dithering),就是以某個演算法加入亂數的雜訊重塑數位「邊緣」,這樣經過數位-類比轉換時,我們-耳朵才能聽到自然的聲音。這裡可以選不同的模式,其中Triangular 是最安全沒問題的。
    • “Force 16bit”:這影響「取樣精度」,JACK預設使用32bit,你可以把他改為低一些的16bit 減輕在超低延遲運算時的負荷(LIVE演奏時有幫助)

關於latency, 要完好運作,如果是外接的USB音效界面,計算出來的JACK延遲最好是可以整除的,也就是1ms的倍數。簡單試算一些:

128*3/48=8ms

256 *3 / 48=16ms

192*3/96=6ms

以MZ-530的內建音效晶片Realtec ALC293為例,取樣頻率48000hz 時,JACK穩定低延遲最低可達 144*2/48=6ms (同步模式),如果設 取樣精度設16bit的話會更穩。這邊再提醒一下, Buffer size是可以自己輸入數字的喔

在Linux audio網站上可以找到這一張簡表 可以參考

那這次入門的設定就介紹到這邊囉,期待大家調出最棒的設定,完全發揮電腦的性能。 ^^