Korzystanie z wtyczek audio VST w systemie Linux AUDIO CROSSOVER Profesjonalne audio cyfrowe było niegdyś domeną prawnie zastrzeżonych systemów, takich jak Apple Macintosh, jednak obecnie na tak samo wysokim poziomie stoją funkcje dźwiękowe w systemie Linux. Bezpośrednio we własnym linuksowym studiu dźwiękowym można nawet korzystać z bogatych zasobów wtyczek audio VST. DAVE PHILLIPS Wświecie oprogramowania do cyfrowego przetwarzania dźwięku komponent rozszerzający możliwości podstawowego programu nazywa się wtyczką (plug-in). Wtyczka może służyć do uzyskania specjalnego efektu, np. pogłosu; może też dodawać instrument MIDI np. wielokanałowy syntezator MIDI albo udostępniać interfejs do sekwencera MIDI. Aplikacja macierzysta i wtyczka muszą być zgodne pod względem sposobu i czasu wymieniania danych oraz samej wymienianej zawartości. Muszą więc posiadać zgodne interfejsy programowania (API). Interfejs taki może być specyficzny dla określonej aplikacji (własne interfejsy posiadają np. programy GIMP i XMMS), ale może to być także interfejs ogólny, wykorzystywany w różnych zastosowaniach. Aplikacja posiadająca ustandaryzowany interfejs wtyczek jest wygodna pod wieloma względami. Programiści aplikacji mogą się skoncentrować na tworzeniu lepszej i bardziej elastycznej struktury bazowej i wewnętrznych mechanizmów aplikacji, zaś programiści wtyczek nie muszą zawracać sobie głowy dopasowywaniem swojego produktu do różnych programów. Oczywiście, wszystko to wiąże się z korzyściami dla użytkownika. Najpopularniejszym interfejsem wśród producentów oprogramowania dla systemów Windows i Mac jest interfejs programowania wtyczek VST firmy Steinberg. Interfejs VST (Virtual Studio Technology) Steinberga udostępniono publicznie pod koniec lat 90.; obecny standard, VST2, pojawił się w 1999 r. O tym, jak bardzo jest popularny wśród programistów i użytkowników, niech świadczą wyniki wyszukiwania słów VST plugin wgoogle. Kiedy pisałem niniejszy artykuł, Google informował o znalezieniu ok. 187 000 stron. Poszukiwanie słów free VST plugin dało prawie 95 000 wyników. O środowisku Pd Pd (Pure Data) autorstwa Millera Puckette'a jest świetnym językiem do graficznego tworzenia dowolnie złożonych systemów syntezy audio i przetwarzania wideo. Komponenty audio-wideo są łączone wirtualnymi kablami; tak powstają wstawki Pd, dane z których wysyłane są dopiero do właściwych urządzeń audio i wideo. Środowisko obsługuje linuksowe systemy AL- SA i JACK oraz funkcje grafiki przestrzennej za pośrednictwem biblioteki GEM. Dla systemów linuksowych przygotowano inne interfejsy programowania do obsługi dźwięku (patrz Ramka LADSPA i inne interfejsy linuksowe ). Jednak mimo sukcesu LAD- SPA i pozostałych interfejsów przygotowanych specjalnie dla Linuksa, użytkownicy tego systemu zajmujący się dźwiękiem prędzej czy później natkną się na sytuację, w której będzie im potrzebna wtyczka VST choćby dlatego, że tych ostatnich stworzono znacznie więcej. W tym artykule opiszemy, jak przygotować system linuksowy do obsługi licznych wtyczek VST stworzonych z myślą o środowiskach Windows i Macintosh. VST/ VSTi Studio dźwiękowe oparte na systemach Windows lub Mac nie obejdzie się bez wtyczek VST. Zaawansowane, komercyjne wtyczki wchodzą obecnie w skład profesjonalnych rozwiązań do produkcji dźwiękowej; są też świetne bezpłatne lub niedrogie wtyczki zapewniające wysoką (czasem profesjonalną) jakość w zastosowaniach domowych lub półprofesjonalnych. Interfejs VSTi stanowi rozszerzenie definicji VST i umożliwia udostępnianie wty- 30 NUMER 15 KWIECIEŃ 2005 WWW.LINUX-MAGAZINE.PL
TEMAT MIESIĄCA czek zawierających instrumenty (tj. syntezator, sampler lub sekwencer). Podobnie jak w przypadku VST, wtyczki VSTi są już standardowymi komponentami oprogramowania dźwiękowego i muzycznego w systemach Windows i Macintosh. Na Rysunku 1 pokazano typowy instrument VSTi syntezator programowy z możliwością odtwarzania przez interfejs MIDI i kontrolą parametrów w czasie rzeczywistym (ręczną lub przez MIDI), a także wyjściem wielokanałowym. Obecnie aplikacje audio Win/Mac powszechnie obsługują wtyczki VST/VSTi. Zgodnych z tym standardem aplikacji jest zbyt wiele, żeby tutaj je wymieniać; znów polecamy niezawodną Google. Użytkowników Linuksa najbardziej zainteresuje inna informacja: z wtyczek VST/VSTi można teraz korzystać w linuksowym oprogramowaniu dźwiękowym i muzycznym! Prace nad obsługą wtyczek VST/VSTi w Linuksie zapoczątkował Kjetil Matheussen z norweskiego centrum badań akustycznych i muzycznych MoTAM. Projekt zaowocował powstaniem programu vstserver podstawy architektury klient/serwer, służącej do obsługi wtyczek VST. Program vstserver korzysta z funkcji biblioteki Wine części aktywnego projektu Wine, mającego na celu umożliwienie uruchamiania aplikacji Windows w systemie Linux. Kjetil napisał także dwa klienty Rysunek 1: Wtyczka Crystal VSTi obsługiwana z zewnętrznej klawiatury. współpracujące z serwerem vstserver: obiekt środowiska syntezy/ komponowania Pd oraz wtyczkę LADSPA pełniącą rolę hosta wtyczek VST. Niedawno do aplikacji tych dodał klienta vsti, który umożliwia wykorzystanie wtyczek VST z instrumentami (VSTi). W efekcie program vstserver umożliwia teraz wykorzystywanie licznych efektów VST i wtyczek instrumentów w systemie Linux. Aby zainstalować środowisko vstserver w systemie, musimy wykonać następujące czynności: pobrać, zbudować i zainstalować najnowszy pakiet Wine autorstwa Kjetila [3]; pobrać, zbudować i zainstalować najnowsze, dostępne pod tym samym adresem pakiety vstserver, k_vst~, ladspavst oraz vsti; ustawić zmienną środowiskową VST_PATH zgodnie z opisem w dokumentacji programu vstserver (tak, żeby serwer wiedział, gdzie szukać wtyczek VST); uruchomić serwer w jego katalogu źródłowym; uruchomić klienta. Do korzystania z wtyczki-hosta LADSPA-VST potrzebna jest wstawka Pd do pakietu k_vst~ oraz odpowiednia aplikacja macierzysta (np. świetna wersja edytora plików dźwiękowych Snd, także autorstwa Kjetila). Autonomiczny program vsti zostanie opisany w dalszej części artykułu. Każdy pakiet zawiera kompletne informacje na temat kompilacji i instalacji. Żeby można było korzystać z systemu Kjetila, konieczne jest pobranie i skompilowanie zmodyfikowanego przez niego kodu źródłowego Wine (dostępny na stronie programu vstserver). Program vstserver jest bardzo wyczulony na punkcie wersji zainstalowanego środowiska O linuksowych systemach dźwięku Niedawno tradycyjny linuksowy system dźwięku OSS/Free (Open Sound System) zastąpiono systemem ALSA (Advanced Linux Sound Architecture). Od wersji rozwojowej 2.5 i stabilnej 2.6 ALSA jest domyślnym systemem dźwięku w Linuksie. Być może jest możliwe uruchomienie wtyczek LADSPA i VST w OSS, ale odradzam takie eksperymenty - podstawą linuksowego systemu audio i MIDI powinno być środowisko ALSA. ALSA dysponuje własnym interfejsem wtyczek rozszerzających funkcjonalność. Nie jest to typowy interfejs aplikacji ogólnego zastosowania, ale zupełnie wystarcza dla systemu dźwiękowego. Na przykład, wtyczka dmix służy do miksowania w systemach bez sprzętowej obsługi łączenia sygnałów audio z różnych źródeł. Standardowo mój laptop może obsługiwać tylko jedną aplikację dźwiękową; jednak włączenie modułu dmix (w pliku ~/.asoundrc - patrz dokumentacja ALSA) umożliwia jednoczesne odtwarzanie dźwięków generowanych przez różne programy. JACK jest przykładem na to, jak znakomite może być oprogramowanie audio w systemie Linux. Projekt ten, zapoczątkowany przez Paula Davisa (Ardour, Softwerk), ewoluował do bardzo szybkiego serwera dźwięku obsługującego komunikację z dowolnymi klientami JACK i zapewniającego obsługę wielu zgodnych z tym systemem aplikacji jednocześnie. Osoby, które zamierzają profesjonalnie zajmować się dźwiękiem, stanowczo powinny zainteresować się technologią JACK. artsd i esd są demonami obsługi dźwięku odpowiednio dla środowisk KDE i GNO- ME. Zazwyczaj stosuje się je do stosunkowo prostych celów, choć dla obu można znaleźć także ciekawe zastosowania przy obsłudze zdarzeń w środowisku graficznym (system arts posiada własny interfejs programowania wtyczek). Nie nadają się jednak do budowania profesjonalnego środowiska audio i, jeśli używamy KDE lub GNOME w takich zastosowaniach, powinniśmy te programy wyłączyć. WWW.LINUX-MAGAZINE.PL NUMER 15 KWIECIEŃ 2005 31
Wine i w przypadku stosowania niezgodnych wersji serwer może w ogóle nie zadziałać. I jeszcze dwie małe uwagi. Jak czytamy w dokumentacji vstserver, na etapie 2 wymagany jest pakiet programistyczny Steinberg VST SDK. Do zbudowania serwera potrzebne są tylko dwa pliki; co prawda pakiet SDK jest bezpłatny, ale jego dystrybucja jest ograniczona, w związku z czym musimy go pobrać oddzielnie. I druga sprawa: jeśli ścieżka do wtyczek VST jest poprawna, ale vstserver nie może ich odnaleźć, można spróbować utworzyć w katalogu określonym w zmiennej VST_PATH dowiązania symboliczne do serwera i obiektu vstservant. so. Rysunek 5: Obiekt k_vst~ z wtyczką VST. Serwer i klient vstserver [3] nasłuchuje sygnałów z aplikacji klienta. Jak wspomniałem wcześniej, Kjetil napisał także dwa klienty współpracujące z serwerem vstserver: Na początku roku 2000 programista Richard W. E. Furse zaproponował prosty interfejs wtyczek audio dla Linuksa. Propozycja ta powstała, a potem nabierała kształtów w dyskusjach na liście mailingowej Linux Audio Developers. Tak powstało rozwiązanie LADSPA (Linux Audio Developers Simple Plugin API) [1]. W nazwie tej duże znaczenie ma słowo simple, czyli prosty. Wtyczki LADSPA nie zapewniają tak zaawansowanej interakcji z aplikacjami macierzystymi, jak ich odpowiedniki VST. Jednak prosty nie oznacza lichy ; wręcz przeciwnie, istnieje już wiele naprawdę świetnych i funkcjonalnych wtyczek LADSPA. Prostota LADSPA tkwi po części w sposobie obsługi błędów interfejsu graficznego: są LADSPA one po prostu ignorowane. Pakiet narzędziowy do obsługi grafiki w aplikacji macierzystej musi udostępniać odpowiednie podstawowe widgety, ale projektowanie widgetów wtyczki pozostawiono już programiście interfejsu graficznego. Dlatego w przeciwieństwie do VST, wtyczki LADSPA mogą wyglądać inaczej w zależności od tego, z którą aplikacją współpracują; sposób używania i funkcjonalność pozostają takie same. Ponieważ interfejs programowania nie narzuca żadnych ograniczeń co do interfejsu graficznego, można także korzystać z wtyczek zupełnie bez używania interfejsu graficznego. Innym ważnym efektem prostoty rozwiązania LADSPA jest ułatwienie integracji z nowymi i już funkcjonującymi aplikacjami. Interfejs programowania szybko zyskał popularność wśród programistów i nie można już sobie wyobrazić linuksowego oprogramowania muzycznego lub dźwiękowego bez obsługi technologii LADSPA. Interfejs został zastosowany w systemach do nagrywania na dysku twardym, aplikacjach do cyfrowego przetwarzania dźwięku, sekwencerach audio/midi, syntezatorach programowych, edytorach plików dźwiękowych i odtwarzaczach multimedialnych. Przy małych opóźnieniach generowanych przez jądro i system ALSA lub JACK, wtyczki LADSPA działają bardzo szybko. Programiści zaakceptowali prostotę rozwiązania LADSPA, a sam interfejs niewiele się zmienił od wersji 1.0. Wyjątkiem było wprowadzenie Rysunek 2: Lista wtyczek LADSPA w programie Hydrogen. Rysunek 3: Wtyczka TAP dodaje pogłos w programie Audacity. 32 NUMER 15 KWIECIEŃ 2005 WWW.LINUX-MAGAZINE.PL
TEMAT MIESIĄCA obiekt do środowiska syntezy/komponowania Pd oraz wtyczkę LADSPA pełniącą rolę hosta wtyczek VST. Opis obu tych klientów zamieszczono poniżej. Pd i obiekt k_vst~ Uruchamiamy serwer, wpisując w terminalu polecenie vstserver. Wyświetlany jest zwięzły komunikat informujący, że serwer jest gotowy do przyjmowania danych od klientów. Jeśli w systemie zainstalowane jest środowisko Pd [8], następujące polecenie umożliwi nam dodanie do programu funkcji obiektu k_vst~: pd -lib k_vst~ Przyjmujemy, że środowisko Pd uruchomiono w katalogu domowym użytkownika. Jeśli działa ono w innym miejscu, konieczne jest wprowadzenie pełnej ścieżki do obiektu. Na Rysunku 5 pokazano wtyczkę VST z efektem wewnątrz prostej wstawki Pd. Wstawka przeprowadza sygnał dźwiękowy przez obiekt k_vst~ object (tzn. wtyczkę VST) i wyprowadza go na wyjście Out karty dźwiękowej. Do zmian parametrów efektu VST służą suwaki, pokrętła i przełączniki zupełnie tak, jak w systemach Windows lub Mac. Szczegółowe informacje na temat przykładowej wtyczki można znaleźć w samouczku mojego autorstwa na stronie http://www.djcj.org /LAU/quicktoots/toots/vst-plugins/. Co ciekawe, najlepsze efekty audio uzyskałem przełączając wyjście/wejście środowiska Pd z systemu ALSA na JACK. (Patrz Ramka O linuksowych systemach dźwięku ). Jeśli dźwięk z wtyczek nie działa właściwie w systemie ALSA, warto spróbować użyć systemu JACK. LADSPA Klient ladspavst Być może dziwny wydaje się pomysł korzystania z wtyczki VST za pośrednictwem wtyczki LADSPA, ale wtyczka ladspavst jest specjalna pełni rolę hosta (systemu macierzystego) dla innych wtyczek. Sama wtyczka ladspavst jest niewidoczna dla użytkownika, natomiast ważne są udostępniane przez nią funkcje. Na Rysunku 6 pokazano wtyczkę filtra NorthPole uruchomioną z menu LADSPA w specjalnie skonfigurowanym na moje potrzeby edytorze plików dźwiękowych Snd. Jak widzimy na Rysunku, wtyczka VST jest przedstawiana jako VST plugin [plugin_name. dll] available from vstserver i uruchamia się ją tak, jak w przypadku dowolnej innej wtyczki LADSPA w systemie Linux. Jak wspomniano wcześniej, wygląd wtyczki zależy od biblioteki graficznej zastosowanej po stronie aplikacji macierzystej; w tym przypadku jest obsługi struktury RDF (Resource Description Framework) wygodnego mechanizmu do kategoryzacji wtyczek, ustawiania ich wartości domyślnych i wprowadzania innych ustawień. Na Rysunku 2 pokazano okno RDF z listą wtyczek LADSPA w programie do tworzenia rytmów Hydrogen. Jeśli korzystamy z dystrybucji linuksowej zoptymalizowanej pod kątem zastosowań audio, infrastruktura LADSPA powinna być już zainstalowana i skonfigurowana w systemie. Użytkownicy systemu Mandrake znajdą pakiet programistyczny LADSPA SDK i zbiór wtyczek na stronie Thaca (patrz lista zasobów). Instalacja i konfiguracja oprogramowania jest równie prosta jak sam interfejs. Ze strony www.ladspa.org pobieramy paczkę tar z kodem źródłowym, rozpakowujemy ją w katalogu domowym i przechodzimy do nowego katalogu ladspa_sdk. Czytamy plik RE- ADME i postępujemy zgodnie z zamieszczonymi tam instrukcjami; następnie przechodzimy do katalogu src. Edytujemy plik makefile i poleceniem make kompilujemy pakiet SDK; następnie jako root wydajemy polecenie make install. Teraz jesteśmy już gotowi do zainstalowania i używania wtyczek LADSPA. Warto zacząć od przejrzenia odsyłaczy na stronie http://linux-sound.org/ladspa.html. Zachęcam do spróbowania wtyczek z kolekcji Steve'a Harrisa, zestawu TAP Toma Szilagyi, świetnych filtrów Fonsa Adraensena, zbioru Tima Goetze i Mika Rawesa... po prostu trzeba je usłyszeć na własne uszy. Na Rysunku 3 widzimy wtyczkę TAP Reverberator, zastosowaną na pliku dźwiękowym w edytorze Audacity. Linux obsługuje także inne interfejsy wtyczek audio. Architektura Multimedia Applications Integration Architecture (MAIA) Davida Olofsona miała rozwiązać problemy związane z interfejsem LADSPA i pełnić rolę ogólnego interfejsu zgodnego z wszystkimi systemami, a w szczególności z Uniksami. Jednak zainteresowanie interfejsem MAIA było niewielkie, a od początku 2001 r. wprowadzono w oprogramowaniu niewiele zmian. Najnowszym pomysłem na wtyczki linuksowe jest interfejs DSSI (Disposable Soft Synth Interface) opracowany przez Chrisa Cannama (Rosegarden), Steve'a Harrisa (wtyczki LADSPA SWH) oraz Seana Boltona. Jak czytamy na stronie internetowej projektu [2], DSSI ma być interfejsem LADSPA dla instrumentów. DSSI nie ma licznych wad, jakie wiążą się z istniejącą linuksową obsługą syntezy programowej, w szczególności tych dotyczących sterowania MIDI. Ponadto interfejs udostępnia mechanizm do uruchamiania wtyczek VSTi. Podczas pisania artykułu technologia DSSI była zaimplementowana tylko w sekwencerze Rosegarden, więc dopiero okaże się, czy interfejsem tym zainteresują się inni programiści linuksowego oprogramowania audio. W mojej opinii ten funkcjonalny interfejs ma duży potencjał i zachęcam zainteresowanych do zapoznania się z opisem technicznym RFC na stronie projektu. Na Rysunku 4 pokazano program Rosegarden z uruchomioną wzorcową wtyczką DSSI xsynth Seana Boltona. Rysunek 4: Interfejs DSSI w programie Rosegarden. WWW.LINUX-MAGAZINE.PL NUMER 15 KWIECIEŃ 2005 33
to Motif. Jednak jeśli sobie życzymy, wtyczka ladspavst umożliwia przejście na własny interfejs GUI wtyczki VST. Wtyczka VSTi i program vsti Jak pisaliśmy, system vstserver współpracuje także z klientem vsti, który umożliwia korzystanie z wtyczek z instrumentami VST (VSTi). Składnia tego programu jest bardzo prosta: vsti /sciezka/dostepu/nazwau _wtyczki.dll Spójrzmy jeszcze raz na Rysunek 1. Pokazano tam wtyczkę syntezatora Crystal uruchomioną z programu vsti. Serwer vstserver jest otwarty i widzimy panel qjackctl autorstwa Rui Nuno Capeli, w którym widać połączenie między moją klawiaturą MIDI a wtyczką Crystal. Program qjackctl posiada także niewidoczny na tym rysunku panel z graficznym interfejsem do definiowania połączeń między poszczególnymi komponentami. Projekt FST Innym narzędziem umożliwiającym korzystanie z wtyczek VST/ VSTi jest system FST (FreeST) [4]; rozwiązanie to ma postać biblioteki, a nie serwera. Według programisty Paula Davisa, FST jest... bardziej odpowiednim rozwiązaniem dla aplikacji dźwiękowych wymagających obsługi wielu wtyczek VST, gdy przechodzenie między wieloma kontekstami nie sprawdza się przy użyciu programu VSTserver. Wadą rozwiązania FST jest to, że... niewłaściwie działająca wtyczka unieruchomi całą aplikację; vstserver nie powoduje takich problemów. System obecnie składa się z biblioteki libfst i programu jack_fst przykładowego narzędzia do ładowania i korzystania z wtyczek VST/ VSTi. Podobnie jak w przypadku programu vstserver, zbudowanie systemu wymaga posiadania kompletnej instalacji systemów Wine i JACK oraz plików AEffect.h i aeffectx.h pakietu Steinberg VST SDK. Funkcje libfst można wkompilować w aplikacje, takie jak system nagrywania na dysku twardym Ardour, środowisko syntezy i przetwarzania dźwięku galan czy sekwencer audio/ MIDI Muse. Po takim zabiegu w programach tych wtyczki VST są dostępne tak samo, jak standardowo obsługiwane wtyczki LADSPA. Rysunek 6: Wtyczka VST we wtyczce LADSPA a obie w aplikacji Snd. Klient jack_fst umożliwia uruchomienie wtyczki VSTi jako autonomicznego instrumentu. Następujące polecenie uruchamia wtyczkę syntezatora Crystal: jack_fst Crystal Nie trzeba wpisywać rozszerzenia; może być jednak konieczne podanie kompletnej ścieżki do katalogu wtyczek. Serwer JACK musi już działać; muszą także istnieć odpowiednie połączenia ze sprzętem audio i MI- DI, które nie są nawiązywane automatycznie. Znane problemy I vstserver, i libfst wymagają konkretnych wersji biblioteki Wine. Jak wspomniałem wcześniej, na stronie środowiska vstserver znajdziemy dostosowaną do niego wersję oprogramowania Wine. Jest to nienowa już wersja Wine; jednak jeśli zdecydujemy się zastosować nowszą, ryzykujemy stabilność programu vstserver. FST też działa poprawnie tylko z niektórymi wersjami Wine. Najnowsze informacje o zgodności z oprogramowaniem Wine oraz o innych problemach dotyczących tych systemów znajdziemy na stronie http://www.djcj.org/lau/ quicktoots/toots/vst-plugins/. Na koniec Mam nadzieję, że Czytelnikom podobało się to krótkie wprowadzenie do korzystania z wtyczek audio VST/ VSTi w systemie Linux. Wtyczki audio są niezbędnym elementem środowiska muzycznego. Teraz użytkownicy Linuksa mogą korzystać jednocześnie ze świetnych wtyczek LADSPA napisanych od razu dla tego systemu, jak i z najlepszych modułów VST/ VSTi, dotychczas dostępnych tylko dla muzyków pracujących w systemach Windows i Macintosh. [1] LADSPA: http://www.ladspa.org [2] DSSI: http://dssi.sourceforge.net [3] vstserver: http://www.notam02. no/arkiv/src/ INFO [4] FST: http://linuxaudiosystems.com/fst/ [5] Zgodność wtyczek VST z Linuksem: http://www.djcj.org/lau/ladspavst/ [6] KVR Audio: http://www.kvraudio.com [7] Korzystanie z wtyczek VST/VSTi w Linuksie: http://www.djcj.org/lau/quicktoots/toots/ vst-plugins/ [8] Pd: http://crca.ucsd.edu/~msp/software.html [9] Lista mailingowa LAU (Linux Audio Users): http://www.linuxdj.com/audio/lad/subscribelau.php3 [10] Strona linuksowych aplikacji dźwiękowych i muzycznych: http://linux-sound.org 34 NUMER 15 KWIECIEŃ 2005 WWW.LINUX-MAGAZINE.PL