發佈日期: 發佈留言

Steam shader precache導致崩潰問題解決

Linux 版的Steam 相對於 Windows版有一個優勢,就是Proton相容層(Steam play) 會根據你的硬體預先下載好所有你玩的遊戲需要的編譯好之著色器( Compiled Shader),而不需要遊戲玩到某個地方,CPU才要開始即時編譯著色器執行碼給GPU用,如果自己的CPU 單核效能不強,這使得許多遊戲的FPS 在Linux 上透過Proton 執行時,反而比Window表現更好。 例如艾爾登法環

這是用額外的容量換取遊戲即時渲染的效能,因為編譯好之著色器資料量蠻大的,通常我們會開啟「允許在背景處理Vulkan著色器」,這樣就會在背景下載編譯好的著色器。然而,有的時候下載過程會出錯,導致Steam 崩潰。然後你重新啟動steam ,想要趕快進入設定選單,到快要按到選取框的後,來不及了,Steam 的速度比你快,他剛好又下載到有問題的地方再次崩潰,然後你發先永遠追不到它dd。

怎麼辦呢?我們發現一個簡單的作法:

  1. 停止網路
  2. 執行Steam (強迫Steam以離線執行)

這樣就可以不用跟Steam賽跑,可以安心關掉「允許在背景處理」甚至關閉著色器預存快取了,然後就可以觀察然後再把他們開回來重新下載囉。

發佈日期: 發佈留言

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網站上可以找到這一張簡表 可以參考

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

發佈日期: 發佈留言

wine的安裝與路線選擇

2020/03/20/13:16 更新,感謝@Ji***@g0*.social 協助校誤

我們知道Linux上面有wine的相容套件庫,裝了它就能雙點執行windows的exe程式,來執行那些真的真的Linux上沒有替代方案的程式。

關於wine的安裝與選擇,Musicha 的顧客由於有付費取得對Ubuntu 的pro audio加強/調校服務,其實有兩種方案。


方案一:需要低延遲使用Windows版的 vst

真的你的音樂專業事務在Ubuntu Linux 上完全找不到替代方案(LV2 、Linux 版vst/vsti等),還非得要使用Windows 原生的VST,且需要即時低延遲運作,那就只好選這個。

方法是從套件管理程式裡面安裝 wine-rt 這個套件,它是KXstudio 開源AUDIO團隊修改出來的即時版wine(不過很舊了,只有2.3 ),它會帶起安裝Carla 等等大量的關係套件,安裝好以後,你就可以安裝Windows的 vst/vsti (包含Kontakt 取樣機等)可以順利且即時運作。

方案二:不講究低延遲、不太玩最新遊戲與程式

這樣的話,套件管理程式裡面選擇Ubuntu 18.04內建的 wine-stable 即可,一樣等一整個葡萄串的軟體套件被連帶安裝起來即可。

方案三:不講究低延遲,要玩最新的遊戲或者應用程式

其實可以的話,盡量用Steam 的Steam Play(使用 Proton,是Valve特別強化版的Wine)機制,就可以執行非常大量的遊戲和少部份遊戲程式,Proton 最新的版本是5.0的版本,請記得更新好來執行Steam 上的Windows only遊戲。

真的不得已,才用wine 方案,由於Ubuntu 18.04 的wine 只有到3.0,太舊了,新的遊戲會有很多狀況 ,這樣的話我們會需要最新的wine 5.0甚至5.4版。

因此我們需要用wine官方的ppa ,根據WineHQ官網的說明文件,要這樣作(以下需要打開終端機, 複製貼上字串等):

1. 啟用i386架構: sudo dpkg --add-architecture i386  
2. 取得winehq的認證公鑰: wget -nc https://dl.winehq.org/wine-builds/winehq.key 
3. 加入winehq的公鑰: sudo apt-key add winehq.key 
4. 加入第三方的winehq ppa套件庫: sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main'  
5. wine 4.5以後,develstaging 開始需要手動安裝這個套件: sudo apt install --install-recommends libfaudio0:i386 libfaudio0

好啦,接著就可以安裝 Wine5的本體啦,然後有三個選擇

而且最好有winehq 最新的個別Windows 遊戲的官方特調參數…

想要安穩一點的,請安裝stable版: sudo apt install --install-recommends winehq-stable
想要協助開發,請安裝devel版:sudo apt install --install-recommends winehq-devel
想要玩最新最新遊戲的,請安裝staging:sudo apt install --install-recommends winehq-staging 
然後Linux 的終端指令,有sudo 可以用"&&"結合,無sudo 可以用";"來結合成一行指令

如果把之前的所有指令組合在一行,以安裝 staging為例,會變成這樣

sudo dpkg --add-architecture i386 && wget -O - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add - && sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main' && sudo apt update && sudo apt install --install-recommends libfaudio0:i386 libfaudio0 winehq-staging

只要用Linux 標準複製大法貼到終端機即可
(反白即複製,按滑鼠中鍵或中鍵模擬就是貼上)
就可以一口氣完成一大堆複雜的動作(想改成stable或devel 請自己改最後一行),這一招請練起來唷,本來用繁複圖形界面的操作,用這樣的「一行指令」就可以完成了。


備註

  • 安裝winehq提供的 wine-stable或者wine-staging 等套件時,libfaudio 、 libfaudio0:i386並不會自動被帶起相依性,所以得手動裝囉(這是一些比較舊的中文wine安裝教學文沒有提到的),這是要特別需要留意的地方
  • 如果你掛了winehq的套件庫,想要切換回wine-rt(2.3)或 Ubuntu 官方包的wine-stable ,最好要在套件管理程式把winehq版本的相關wine套件都「完整反安裝掉」(在synaptic 裡面很好作),再裝wine-rt;要回到Ubuntu官方包的 wine-stable 3.0的話,除了反安裝掉WInehq版本的wine所有套件以外,還要再關閉winehq的套件庫來源(Synaptic的下拉選單裡面選),update套件庫清單一次,然後再安裝wine-stable就會是Ubuntu 官方3.0版的。
  • winehq的ppa畢竟不是 ubuntu 官方維護的,當有一天你需要升級Ubuntu系統時,請記得先把winehq相關的套件庫來源都關掉、按「更新」套件清單,再作升級喔
發佈日期: 發佈留言

新的教學影片—《Ardour 滑鼠手工點音符入門》 上線囉

這次的重點主要是很多Ardour 初學者使用midi 編曲功能時,很容易遇到這個誤區——有「物件編輯」跟「物件編輯」(一個物件裡面裝了許多音符)兩種模式的切換,這是含有Ardour 操作邏輯比較特殊的地方,或者說有點像是類似「Audio 物件」邏輯的延伸,也許比較類似Pro Tools的邏輯吧?

有幫助的話,請在youtube上給我們點個讚吧,前一集的這個影片也可以搭配看。

接下來影片推出的速度會漸漸變快~