LWN:Linux audio plugin APIs綜述!

語言: CN / TW / HK

關注了就能看到更多這麼棒的文章哦~

An introduction to Linux audio plugin APIs

April 21, 2022 This article was contributed by Alexandre Prokoudine DeepL assisted translation https://lwn.net/Articles/890272/ 

音樂和音訊製作(music and audio production)相關領域主要是由專有軟體供應商(proprietary software vendors)主導的。其中,Steinberg 公司作為一家創造了一些最常用軟體的公司脫穎而出,這些軟體包括 Cubase 和 Nuendo digital audio workstations (數字音訊工作站)。Steinberg 也是著名的 VST plugin API 的創造者,這個 API 由於許可政策(licensing policy)的原因,讓開發者們很憤怒以至於多次嘗試去創造一個開源的替代品。儘管現在 VST3 SDK 已經可以在 GPLv3 license 下使用,但是該公司對 SDK 的控制方式仍然將開發者們在推向其他的開源解決方案。

本文是對音樂家和音響工程師所使用的開源 plugin API 各種方案的介紹。主要關注點是較大的生態系統,以及他們有哪些缺點,如何導致了新的基於自由許可證的替代方案。

What audio and MIDI plugins do

大多數的音訊編輯器、MIDI 音序器(sequencers)和數字音訊工作站(DAW, digital audio workstations)都是可擴充套件的。這裡的可擴充套件,有時候是指可以寫指令碼來使用程式提供公共 API(例如 Ardour 的 Lua 指令碼,Reaper 的 ReaScript 指令碼)。但最常見的用法還是直接寫一個擴充套件(extension),或者叫外掛(plugin),來利用那些通常不侷限於單一程式裡的 API。然後,音訊編輯器或 DAW 就會作為該外掛的 "host",在自己的程序中執行,或作為一個單獨的程序來執行(這是一個越來越流行的做法了)。

外掛在 DAW 中最常見的兩個使用場景就是處理音訊(equalizers 均衡器、reverbs 混響器等),這意味著要有音訊輸入和音訊輸出;以及將音符(note)變成音樂(music),這就需要有 MIDI 輸入和音訊輸出。大多數外掛的 API 都支援音訊和 MIDI 的輸入和輸出。此外,有些外掛是為了控制外部裝置而創造出來的,比如有的帶有 DSP 的主機板的音訊介面,也比如內建的 reverberation engine (混響引擎)。這些外掛通常由硬體供應商自己製作,不過也有一些少見的例外情況。

不同於許多影象編輯器中的外掛,音訊和 MIDI 的外掛通常被設計成非破壞性的(non-destructively)工作方式,並實時執行。這意味著你不需要去渲染生成(render)經過處理後的音軌來聽。你完全可以直接連線一個 MIDI 鍵盤,演奏一個虛擬樂器,都完全不需要記錄一個音符,而且你可以在今後隨時來改變外掛中的引數的值。

A quick overview of current plugin APIs

如下這些外掛 API 目前在廣泛使用中:

  • Virtual Studio Technologyy,即 VST2/VST3,由 Steinberg 開發。它支援 Windows、macOS 和 Linux,並且有廣泛的 host/DAW 都支援它。

  • Digidesign/Avid 的 Real Time AudioSuite,即 RTAS(Windows、macOS,需要 Avid Pro Tools 才能支援)。

  • Avid Audio eXtension, 或稱 AAX, 由 Avid 開發 (Windows, macOS, 需要 Avid Pro Tools 才能支援)。

  • 蘋果公司的 Audio Unit, 或 AU, (macOS, iOS/iPadOS)。

  • LV2,這是一個開源專案(Linux、Windows、macOS)。

在行業之中所提供的外掛大多是以 VST2/VST3 的形式提供給 Windows 和 macOS,也會以 AU 的形式提供給 macOS。有時候外掛也是 AAX 和 RTAS 的形式來提供給 Avid Pro Tools 使用者,因為 Avid 早就因為拒絕支援它自己以外的任何 API 而臭名昭著了。

具體到 Linux 環境,LADSPA 是第一個廣泛使用的音訊外掛 API;DSSI(一次性軟合成器介面)是由同一個團隊在這個 API 上面開發的,使得軟體合成器(synthesizer)和取樣器(sampler)也可以作為外掛來使用。目前有幾百個 LADSPA 外掛,但 DSSI 外掛還不到 50 個。Linux 上的大多數音訊編輯器和 DAW 都支援 LADSPA,很少有支援 DSSI 的。LADSPA 和 DSSI 現在基本上都被 LV2 取代了,LV2 支援音訊和 MIDI 處理。今天有了超過一千種 LV2 外掛。

還有越來越多的外掛——既有專有的也有自由許可的——是為 VST API 編寫的,並且是在 Linux 上編譯生成的,這主要是由於 VST3 SDK 既支援 GPLv3 也支援專有許可證的條款。事實上,一些非常棒的自由軟體外掛,如 Dexed 和 OB-Xd synthesizer 在 Linux 上只支援 VST3。

最後一個值得一提的 API 是 Generalized Music Plugin Interface,即 GMPI。其最初規範是在 2003 年到 2005 年之間由很多開發者共同設計出來的,開發者們包括來自專有軟體(SONAR、SynthEdit、FL Studio 等)和免費軟體(Ardour 等)的成員。儘管他們的背景各不相同,但這些開發者都有一個共同的想法:每個人都對 Steinberg 在行業中的主導地位感到不爽,我們將在下面詳細討論這個問題。

GMPI 規範被 Tim Hockin(來自谷歌,但是這個工作跟公司無關)和 Jeff McClintock(SynthEdit)實現成了一個非官方的 SDK,Koen Tanghe(當時是根特大學的工程師)也在開發他自己的版本。儘管很多人提出要求進行 review,但是 Hockin 和 McClintock 程式碼並沒有得到很多同行評審。最終工作組解散了,McClintock 在他的 SynthEdit 外掛 API 的第三次大改中使用了這個 SDK 的一個削減過的版本。第四次大改中將包含經過重構的 GMPI SDK 版本。

關於這裡發生了些什麼,我已經聽到了若干種解釋。McClintock 在一次私人談話中分享的故事是與公開的郵件列表中的討論最接近的。他的印象是,許多利益相關者只想要一種自由許可的 VST2,而不希望有重大的改變和改進,所以沒有動力去 SDK 進行 review。Paul Davis(Ardour)提供的另一個說法是,當初宣佈這一提案倡議的 MIDI Manufacturers Association 會希望開發階段是封閉進行。據報道,該協會也不能保證最終會採用所有人都會滿意的許可證。因此,當一個官方 SDK 真正出現時,許多利益相關者可能都已經失去了興趣,而這些人可能對非官方的 SDK 也不感興趣。

我提到 GMPI 有三個原因。首先,這是歷史上第一次由專有軟體和自由軟體的開發者聯手開發一個開源的音訊/MIDI 外掛 API。其次,雖然基本上沒有成功,但 GMPI 影響了 VST3 和 LV2 的設計( https://lv2plug.in/gmpi.html 有關於後者的更多資訊)。最後,McClintock 在去年 12 月繼續開始進行完整的 GMPI SDK 的開發工作。該 SDK 遵循 ISC license 許可。

Where existing plugin APIs fall short

首先,如果你想開發一個在 Linux 上使用的音訊/MIDI 外掛,那麼比起 Windows 和 MacOS 環境來說,你只有更少的選擇。

除了 macOS 和 iOS/iPadOS 之外,AU(包括 v2 和 v3)無法在其他任何地方使用。AAX 和 RTAS 是跨平臺的,但只能在 Avid Pro Tools 中使用,在 Linux 上無法使用。到目前為止,SynthEdit 似乎是唯一真正使用 GMPI 的軟體。那就剩下 VST2、VST3、LADSPA、DSSI 和 LV2 了。這些 API 在 Linux 上的 host application 應用程式裡都有支援,既有免費的也有專有的,儘管其實只有只有兩個 host 程式,也就是 Qtractor 和 Zrythm,它們倆都支援所有五個外掛 API。

VST2 就已經到了生命的盡頭。如果你持有 VST2 SDK 的 license,只要你願意,你就可以開始製作該外掛的新版本了。但是 Steinberg 不會為新的外掛來發布 SDK license,VST2 在 Linux 上從未廣泛使用的一個主要原因就是需要授權使用這個 SDK。為數不多的原生的 VST2 外掛確實曾經在 Linux 上出現過,這要歸功於一些 LMMS 開發者製作的 clean-room reverse-engineered VeSTige header file。

LADSPA 和 DSSI 都是簡單的 API,Linux 上大多數 audio host 都支援 LADSPA。然而,這些 API 都有很多技術限制,它們沒有很好地維護起來,而且幾乎所有人都在幾年前就停止製作新的 LADSPA 和 DSSI 外掛了。因此,我們現在只剩下 VST3 和 LV2 了。

VST3 的規範(specification)很符合當代的需求,從而可以建立功能強大的外掛。它也是可擴充套件的,儘管 VST3 的擴充套件都分佈在零零散散的第三方供應商那裡。然而,多年來,Steinberg 已經成功地激怒了專有和自由軟體外掛的開發者。該公司淘汰 VST2 的方式使外掛開發者們感到很不爽,因為無法使用以前的技術來為仍然支援 VST2 的 host 創造新作品了。除此之外,Steinberg 自己的 host 和外掛都將在 2024 年 1 月停止支援 VST2,所以使用者擁有的任何 Cubase 和 Nuendo 專案都會完全無法載入了。Steinberg 採取了一些措施,方便 VST2 向 VST3 的過渡,但據說既沒有設計好,也沒有能讓開發者及時去了解這一功能,從而導致現在這個悔之不及的錯誤。

再有就是不可避免的技術爭議。VST3 SDK 非常龐大,而且有許多難以理解的奇葩做法,比如強制使用 UTF-16。尤其是,VST3 中有一個全新的方式,來通過一個方便的抽象層來處理傳入的 MIDI 資料,這個做法很有價值,但它要求對現有的外掛重新修改架構,完全無法繼續沿用以前的舊方式。這使得人們很難去同時維護外掛的 VST2 和 VST3 版本。要了解開發和維護一個功能齊全的 VST3 版本的比較複雜的外掛需要多少工作,你可以閱讀 Urs Heckmann 在 KVR 的說法(https://www.kvraudio.com/forum/viewtopic.php?p=8331782#p8331782)。

總之,這個行業已經厭倦了受 Steinberg 擺佈的生活。GMPI 是打破這個現狀的第一次重大嘗試,但是,如上所述,它並不成功。

LV2 是在 2000 年中期利用 GMPI 規範中的許多想法建立的。它的設計是很現代的、可擴充套件的,並支援許多很棒的功能。然而,儘管現在有超過 1000 個 LV2 外掛可用(https://gist.github.com/mxmilkiib/8624da2fdd59c17d048147d97f6ea0c7 有一個較新的、但並不完整的列表),但人們普遍認為 LV2 很難上手。自從它誕生以來,我觀察到開發者對這個 API 有一些抱怨。有些問題是純技術性的。例如,plugin metadata 是單獨儲存在使用 Turtle 語法的文字檔案中。對於複雜的外掛,這些檔案往往會變得非常大。比如說,Mix Maxtrix 的生成的 metadata 檔案有將近 32000 行,儘管這只是一個極端的例子。其他開發者認為太多靈活性是他們對 API 的主要抱怨。

還有一些組織方面的問題,如缺乏管理機構並且 "廚房裡有太多的廚師",這導致外掛開發者感覺沒有人聽他們的觀點。LV2 的維護者對他們的設計決定都表現的有些過度防衛了,不喜歡重新檢查是否需要改變這些設計,這種感覺也讓人們不太滿意。在更大的範圍內來說,終端使用者需要一個生態系統,而 LV2 從來沒有建立起這樣的生態系統。然而,這是一個非常寬泛的說法,這一點需要單獨開一個文章來討論如何定義一個外掛 API 的生態系統了。

還有更多的原因導致了這個 API 的採用非常緩慢。一個原因是,LV2 在自由軟體領域之外的 host 開發者中並不受歡迎。由於 host 缺乏對 LV2 的支援,因此大大限制了終端使用者去接觸到這些外掛。Reaper 幾乎是唯一支援 LV2 的主流 DAW(大範圍採用的),但 Reaper 也支援幾乎所有的外掛 API。

另一個問題是,LV2 目前不被主流外掛開發框架所支援。使用這些框架,可以一次編碼就能編譯生成多個外掛 API 的外掛。在這些框架中,有一個由 falkTX 開發的、10 年前從 JUCE fork 出來的框架,它添加了對 LV2 的支援,upstream project 正在重新實現這部分功能,但沒有宣佈計劃大概會在什麼時候完成。另外,第三方針對 iPlug2 框架新增 LV2 支援的工作也一直未被合併到 mainstream 中。

所有這些因素都影響了 LV2 的採用。因此才會有後來發生的各種事情,比如 OB-Xd 開發者關閉了請求支援 LV2 的要求,因為 JUCE6 有 VST3 支援但是沒有 LV2 支援。要讓外掛開發者在使用 JUCE 時也能生成一個原生的 VST3 外掛已經很困難了,要讓他們釋出一個 LV2 版本,那就幾乎是不可能的了。

我可以肯定,這裡提到的大部分觀點都會被那些大量使用 LV2 的開發者所反駁。然而,就算是簡單的觀察一下也可以看出,LV2 在 FOSS 生態系統之外既不流行、也不出名。

In conclusion

目前有兩個開源的音訊/MIDI 外掛 API 在活躍使用中,這就是 VST3 和 LV2。這兩個 API 都提供了可以建立複雜外掛的功能,但從一些開發者的角度來看,無論是技術方面還是這些 API 各自的維護者的管理方式方面,兩者都有些問題。

對於 VST3 來說,開發者必須要接受 Steinberg 的很有侵略性的 license 政策。這實質上意味著永遠不能再新建 VST2 外掛了。對於虛擬樂器的開發者來說,這意味著要麼完全放棄對現有 VST2 外掛的支援,要麼就只有花費精力同時維護兩個不同架構下的程式碼庫。除此之外,API 中的其他各種設計決策也也都受到了批評。

對於 LV2 來說,開發人員學習曲線太陡峭,而且如果他們想在一個程式碼庫中開發支援多個 API 的外掛的話幾乎沒有什麼選擇。他們還將被限制在只有開源的 host 應用程式以及唯一一個專有的數字音訊工作站(Reaper),這大大限制了他們能觸達的使用者,除非他們能夠支援多個 API。

這種情況已經持續了多年。在 2015 年引出了另一個開源 API,也就是 CLAP。這個專案在去年年底被複活了,現在正在想辦法支援免費和專有軟體。我們將在後續的文章中更詳細地談論它。

[非常感謝 Paul Davis, Robin Gareus, Filipe "falktx" Coelho, William Light, Alexandre Bique, Jeff McClintock 就音訊/MIDI 外掛 API 的各種技術問題提供指導。]

全文完

LWN 文章遵循 CC BY-SA 4.0 許可協議。

歡迎分享、轉載及基於現有協議再創作~

長按下面二維碼關注,關注 LWN 深度文章以及開源社群的各種新近言論~