[K] Fender Studio Pro - własne rozszerzenie, cz. 2
Poprzednio opisałem bardzo ogólnie moje "rozszerzenie" dla Fender Studio Pro, dziś pora dla pamięci wejść bardziej w szczegóły i ujawnić, co można zdziałać za pomocą tego wielce eksperymentalnego kodu. Jednocześnie wyjaśnię, dlaczego - póki co - nie upubliczniam tego rozszerzenia innym użytkownikom. To nie ze złośliwości czy samolubstwa - a właśnie dlatego, że to kod bardzo eksperymentalny. Od momentu napisania pierwotnego opisu musiałem wprowadzić sporo poprawek, choć już wtedy wydawało się, że wszystko działa jak należy. Niestety, bez dokumentacji stąpam bo bardzo cienkiej linie i muszę sporo potestować to rozszerzenie przy prawdziwej pracy nad mock-upami, zanim uznam je za w miarę bezbłędne i bezpieczne.
Po co zatem w ogóle wspominam o tym rozszerzeniu, skoro się nim nie dzielę? No cóż, dzielę się pomysłami na różne funkcje i być może kogoś zachęci to do spróbowania realizacji podobnego narzędzia?
Praktyka
Wszystkie opisane poniżej funkcje wynikają tylko i wyłącznie z moich praktycznych potrzeb. Część udawało mi się jakoś rozwiązywać makrami w Fender Studio Pro, część absolutnie nie dała się w ten sposób opracować, a bardzo przyspiesza mi pracę. I przyspieszała nawet w postaci poprzedniego, mało wygodnego MIDI Tools Hub. Przejdźmy do konkretów.
Funkcji nieco przybyło od ostatniego razu
Velocity
O ile krzywe CC daje się bez problemu kopiować między poszczególnymi eventami i ścieżkami, to już velocity się tak skopiować nie da. Zaznaczanie słupków w edytorze powoduje automatyczne zaznaczenie nut, więc i one są kopiowane. W mojej robocie to problem, bo prowadzi często do mechanicznego przerysowywania wielkości słupków, np. przy ostinato. Mamy cztery dźwięki na krzyż, ale powielone kilkanaście albo kilkadziesiąt razy. I rysuj tu, człowieku, słupek po słupku.
Pierwszym pomysłem było akcentowanie co którejś nuty - normalnie stosowałem do tego celu wbudowane narzędzie Fender Studio Pro, czyli zaznaczanie co n-tej nuty, a potem podnoszenia czy obniżania jej velocity. Teraz wbudowałem sobie cztery "gotowce", gdzie wystarczy tylko zaznaczyć ciąg nut i raz kliknąć, by odpowiednie nuty zyskały dodatkowe punkty velocity. Jeśli potrzebuję dokładnej regulacji, zawsze mogę skorzystać ze starego, wolnego sposobu, ale w praktyce wystarcza mi szybkie, nowe rozwiązanie.
Bardziej skomplikowana jest rzecz z ostinato. Tutaj zwykle trzeba opracować zmiany velocity dla kilku czy nawet kilkunastu nut - a potem powielić to na pozostałe fragmenty. I tutaj wchodzi, cała na biało, funkcja Copy Velocity, która... no, zapamiętuje velocity zaznaczonych nut. Potem wystarczy zaznaczyć cały ciąg nut "docelowych" i użyć jednego z poleceń wklejania velocity - albo wprost, albo jako "krzywej". Jaka to różnica? Otóż zwykłe Paste Velocity po prostu bierze kolejne nuty i nadaje im velocity ze skopiowanego bufora. Skopiowano cztery nuty o velocity 45, 77, 54, 87? To teraz każda kolejna nuta dostanie 45, 77, 54, 87, 45, 77, 54... i tak dalej (bo zastosowałem pętlę, więc można zaznaczyć od razu bardzo dużo nut i dostaną one velocity według zapamiętanego szablonu.
Kopiujemy mały, opracowany fragment...
...i wklejamy całej rescie
To czym się różni Paste Velocity Curve? Tu ma znaczenie... czas. Wklejane nie są dane nuta po nucie, tylko "obszarowo". Jeśli najpierw mamy skopiowane np. dwie ósemki o velocity 56 i 88, potem dwie półnuty 32 i 43, to tak naprawdę skopiowaliśmy coś w rodzaju krzywej, która leci od 56 do 88 przez dwie ósemki, potem do 32 i stamtąd do 43 przez dwie półnuty. Zatem jeśli wkleimy taką "krzywą" na szereg szesnastek, to ich velocity zostanie policzone według takiej właśnie krzywej i pierwsze cztery dostaną np. 56, 75, 82 i 88, potem kolejne będą spadać do 32 i rosnąć do 43, "odtwarzając" wartości wzorca. Inaczej mówiąc, zwykłe wklejanie kopiuje nuta w nutę, niezależnie od długości tych nut, drugie wkleja wartości, aby zgadzały się z długością obszaru źródłowego.
Kolejne funkcje związane z velocity generują wartość tego parametru z zależności między dźwiękami. Zakładają one (co jest oczywistym uproszczeniem, ale praktycznym), że dźwięki pasażu granego w górę dostają rosnącą wartość velocity (dążenie do kulminacji), a pasaże schodzące tracą velocity. Crescendo i Diminuendo mają tylko jeden kierunek, zaś Expressive Velocity obsługuje jednocześnie oba kierunki, więc można ją zastosować do pasaży biegnących raz w jedną, a raz w drugą stronę.
Pasaż leci w górę i w dół
No, to velocity też leci w górę i w dół
Tryle
Zazwyczaj w bibliotekach orkiestrowych tryle nagrane przez producenta powinny brzmieć bardzo realistycznie. Niestety, nie zawsze tak jest, a czasem wręcz nie mamy takiej artykulacji do dyspozycji. Z kolei tryle spotykane w powszechnie dostępnych plikach MIDI są zapisywane bardzo generycznie, jako równej długości naprzemienne krótkie nuty:
Taki tryl na pewno nie wypadnie przekonująco
Rzecz jasna, nie brzmi to zbyt przekonująco, bo muzycy nie tak grają tryle. Tryl zaczyna się powoli, dąży do kulminacji z szybszym vibrato i znów nieco zwalnia. To też, rzecz jasna, uproszenie, ale brzmi zwykle dużo lepiej niż prosta zmiana wysokości jednakowych nut, zwłaszcza jeśli jednocześnie zadbamy o zmiany velocity:
Ale taki tryl, to zupełnie co innego
Tryle zapisane jako naprzemienne nutki są z kolei pewną przeszkodą przy stosowaniu artykulacji - te z reguły wymagają po prostu jednej, długiej nuty, a nie szeregu krótkich nutek. Trzeba więc te krótkie nuty wyrzucić i w ich miejsce wstawić pojedynczą - to też postanowiłem sobie uprościć.
Tryl w takiej postaci nie nadaje się do przypisania artykulacji
Zasada jest prosta - zaznaczam taki tryl i wywołuję funkcję Variation Trill. Następuje rozpoznanie trylu (czy jest półtonowy czy całotonowy), usuwane są zbędne nuty, a jedyna ocalała jest rozciągana na całą wymaganą szerokość i dodatkowo zostaje jej ustawiona odpowiednia artykulacja:
Trzeba go zamienić na pojedynczą nutę i przypisać Sound Variation
Żeby już mieć załatwione tryle do końca, wbudowałem sobie jeszcze funkcję wyszukującą Find Next Trill. Obrobiwszy jeden tryl, skaczę od razu do kolejnego, i kolejnego...
Porządek i estetyka
Niemal od samego początku prac nad mock-upami postanowiłem być systematyczny i stosować konsekwentnie jednakowe kolory oraz sposób porządkowania ścieżek. Może ich być całkiem sporo, więc jest to realne ułatwienie.
Przede wszystkim każda sekcja orkiestry jest pakowana do osobnego folderu: dęte drewniane, dęte blaszane, perkusja (i inne) oraz smyczki. Ustaliłem też własne kody kolorystyczne: zieleń to dęte drewniane (bo las), pomarańczowy to dęte blaszane (bo miedź i mosiądz), smyczki to ciemnożółty kolor sosny (ha, ha), a fioletowy dla perkusji i różnych instrumentów... żeby się odróżniały.
Tak to wygląda po uporządkowaniu: ścieżki w folderze, kolory, nazwy, szyna w mikserze...
Żeby łatwiej miksować, każda sekcja dostaje też swoją grupę w mikserze, pokolorowaną i nazwaną. Ogólnie zatem, żeby jako taki ład zapanował, trzeba się trochę naklikać. Aby i tego sobie oszczędzić, napisałem sobie funkcję grupującą, która te wszystkie rzeczy robi za jednym wywołaniem: zaznaczamy wszystkie ścieżki danej grupy, wywołujemy funkcję i... mamy folder, kolory, nazwy, grupę w mikserze. Gotowe!
Funkcje różne
O TrueLegato chyba wspominałem już ostatnio - chodzi o to, by nie tylko ślepo wydłużyć wszystkie nuty, by lekko na siebie nachodziły. Chodzi też o to, by nuty o tej samej wysokości nawet się nie dotykały, bo część bibliotek w takiej sytuacji nie odtworzy drugiej nuty:
Fraza bez wydłużonych nut
Nuty zostały wydłużone, chyba że są tej samej wysokości - wtedy stosowana jest dodatkowa pauza
Wśród funkcji "różnych" dla mnie najważniejsza jest jednak funkcja Smart Merge i już mówię, dlaczego. Znów wszystko bierze się ze sposobu zapisu w pliku MIDI, ale tym razem nie chodzi o tryle, tylko o tremolo, czyli powtarzanie tego samego dźwięku, mające budować napięcie czy wrażenie niepokoju. Zapisywane jest to po prostu następującymi po sobie krótkimi nutami:
Tremolo w postaci serii nutek
I znów, jeśli mamy w bibliotece orkiestrowej specjalną artykulację dla tego typu dźwięków, warto z niej skorzystać, bo często brzmi bardziej przekonująco, jednak znów - jak przy trylach - trzeba zamienić pojedyncze nutki na długie nuty i nadać im artykulację. Teoretycznie jest tu prościej niż przy trylach, bo wystarczy po prostu scalić drobne nuty, jednak na przeszkodzie staje funkcja Merge, która scala po prostu WSZYSTKIE nuty o tej samej wysokości w zaznaczeniu:
Scalanie "na pałę", czyli bez ładu i składu
Oczywiście, muzycznie nie ma to sensu, stąd napisałem własne Smart Merge, które grupuje nuty i pozwala łatwo uzyskać odpowiedni efekt:
I scalenie "z sensem"
Do dziwnych funkcji rożnych, ale bardzo przydatnych jest wyszukiwanie "podobnych fraz". Np. mamy pasaż, złożony z określonych interwałów i chcemy wszystkim tym pasażom przypisać taką samą sekwencję velocity:
Zaznaczamy frazę do wyszukania...
Na obrazku jest prosty scenariusz, gdzie można by po prosty wkleić skopiowane velocity wszystkim pasażom, ale gdyby były one oddzielone jakimiś innymi frazami, trzeba by je ręcznie zaznaczać jedna po drugiej. W momencie, gdy mamy wyszukiwanie fraz, zaznaczamy pierwszą z nich, kopiujemy velocity i wyszukujemy kolejną, wklejamy jej velocity, szukamy kolejnej i tak dalej, i tak dalej.
... i jest, mamy ją!
O solowaniu ścieżek z wykorzystaniem Reference Track pisałem dość szeroko ostatnio, a o randomizacji czasów początków nut, żeby wprowadzić trochę humanizacji, trochę szkoda gadać.
Uzupełnienie warsztatu
Jedną z rzeczy ważnych zwłaszcza na początkowym okresie jest wstępne przypisanie artykulacji. Kiedyś, na początku, zaczynałem od wszystkiego ustawionego na legato i później stopniowo posuwałem się krok po kroku, takt po takcie i ścieżka po ścieżce, aż zbudowałem cały utwór. Obecnie mam zupełnie inne podejście: chcę jak najszybciej, by cały utwór zaczął brzmieć przynajmniej "jako tako", a potem dopiero zajmuję się detalami.
Miałem zatem w StreamDecku zdefiniowane makra, które zaznaczały nuty o różnych długościach, np. 1/64 i krótsze, potem 1/32 do 1/64, potem 1/16 do 1/32, potem 1/8 do 1/16 i tak dalej. Najkrótszym nutom nadawałem artykulacje spiccato na przykład, tym trochę dłuższym staccato, potem portato aż do long czy legato. Było to jednak bardzo niedoskonałe, szczególnie dla utworów o zmiennym tempie lub generalnie różnym od standardowych 100-120BPM. Przy wolnym tempie ósemka czy szesnastka trwają dużo dłużej niż dźwięki zapewniane przez artykulację staccato.
Potrzebowałem innego podejścia - zaznaczania nut nie po ich nominalnej długości w takcie, ale po faktycznej długości trwania w czasie, w konkretnym tempie. I taką funkcję także sobie dodałem: można o niej myśleć w ten sposób, że zaznacza ona nuty PASUJĄCE do konkretnej artykulacji. Jeśli wybieram sobie Select short, dostaję nuty, które będą dobrze brzmieć po przypisaniu im artykulacji staccato. Ultra short to raczej krótkie spiccato, a Medium to portato. I jeśli nawet w utworze zmienia się tempo, to moja funkcja zaznaczy te nuty, które w danym tempie będą trwały akurat tyle, ile trzeba. I to faktycznie działa - dla umiarkowanego tempa mam praktycznie to, co miałem wcześniej, za to dla innych szybkości odtwarzania zaznaczam teraz dla staccato nawet ósemki na przykład, jeśli "lecą" odpowiednio szybko - a z drugiej strony, dla wolnych utworów ta sama ósemka może trafić do worka z long.
Opowiem teraz co nieco o funkcji Expand Basso Continuo. Dopisałem ją sobie głównie na potrzeby aranżacji wczesnobarokowych kompozycji, kiedy to jeszcze królował w zapisach tzw. bas cyfrowany. Była to z reguły partia przeznaczona dla wiolonczeli lub fagotu, z dodatkowymi oznaczeniami cyfrowymi, by dało się zagrać z tych pojedynczych nut także akompaniament na klawesynie. Oczywiście, ja żadnym klawesynistą sprawnym w czytaniu i graniu basso continuo nie jestem, więc zaprogramowałem sobie algorytm oparty na starych podręcznikach, dość dokładnie opisujących, jakie dźwięki powinny wchodzić w skład akordów. Wystarczy zatem zaznaczyć np. wszystkie linie smyczkowe:
Mamy tylko smyczki?
Wywołujemy funkcję i otrzymujemy gotową partię dla klawesynu. Rzecz jasna, każdy klawesynista czy organista by pewnie wyśmiał te efekty, ale na moje mock-upowe potrzeby jest to rozwiązanie wystarczające i już nieraz umożliwiło mi nagranie utworu.
Nie szkodzi, da się z tego sporządzić partię dla klawesynu
Inną, ułatwiającą mi mock-upowanie funkcją jest Divisi. Po raz kolejny wracamy do sposobu zapisu danych w plikach MIDI. Bardzo często instrumenty dęte - drewniane i blaszane - są zapisywane podwójnie na jednej pięciolinii. Dwa flety, dwa oboje, dwa klarnety, dwa fagoty, cztery waltornie, dwa puzony - wszystkie te instrumenty mają najczęściej jedną pięciolinię, ale na niej dwie linie melodyczne. Muzycy sobie z tym radzą i każdy wie, którą partię gra.
Teoretycznie mógłbym to tak zostawiać - i często tak robiłem przez pierwszy rok "zabawy w orkiestrę". Jeden wirtualny instrument grał dwie nuty jednocześnie i tyle. Kiedy dorobiłem się Orchestral Tools Berlin Orchestra, z jej bogactwem solowych instrumentów, coraz częściej korciło mnie, by grały faktycznie dwa flety, dwa oboje i tak dalej. Rozdzielałem partie ręcznie, co nie zawsze było proste i czasem się mocno gubiłem. W takich zadaniach komputery sprawdzają się dużo lepiej, zatem powstała stosowna funkcja, która rozbija podwójną ścieżkę na dwie pojedyncze i na dodatek można sobie zaznaczyć, czy wspólne nuty mają być powielone w drugiej partii (czyli instrumenty grają unisono), czy też w tych momentach jeden z instrumentów po prostu milczy.
"Podwójna" ścieżka rogu...
...rozbita na dwie osobne ścieżki
Na koniec jeszcze tylko wspomnę o bardzo eksperymentalnej funkcji kopiowania artykulacji. Może się ona przydać, kiedy "przepisujemy" utwór zaaranżowany na jednej bibliotece orkiestrowej, na inną bibliotekę. Wtedy przypisane Sound Variations tracą sens, bo są zakodowane z reguły zupełnie inaczej po obu stronach i wtedy w skopiowanej ścieżce widzimy tajemnicze znaki ???.
Wyszedłem z założenia, że można sobie oszczędzić sporo pracy, jeśli zapamiętamy (skopiujemy) nie tyle kody artykulacji, co ich nazwy. I to po nazwach postaramy się dopasować artykulacje. W końcu zwykle Legato to Legato, Staccato to Staccato i tak dalej, te najpopularniejsze są bardzo zbliżone. I faktycznie, okazało się, że ma to sens: większość podstawowych artykulacji przenosi się bez przeszkód, pomęczyć się trzeba z trylami czy jakimiś szczegółowymi artykulacjami. Niestety, moje ulubione biblioteki Vienna Symphonic Library bardzo słabo się tu sprawdzają, bo nie dość, że mają artykulacje "automatyczne", wpisane przez producenta, to mają one bardziej rozbudowane nazwy i z reguły nie ma tam np. prostego Staccato, tylko od razu jest to Staccato Bold.
To na razie tyle
Dodatek testuję intensywnie od mniej więcej tygodnia, ale to ciągle za mało, by być go pewnym. Na razie nagrałem dwa mock-upy, intensywnie korzystając szczególnie z funkcji zaznaczania długości nut i modyfikacji velocity. To się naprawdę przydaje. Zresztą, tryle czy TrueLegato również, a także przełączanie ścieżki referencyjnej. I zdecydowanie wygodniej korzysta się z funkcji wbudowanych w Fender Studio Pro, ze zdefiniowanymi skrótami klawiaturowymi, niż z MIDI Tools Hub poprzez nieporęczny panel Files. Cieszę się, że zdecydowałem się zanurkować w plik package...





















Komentarze
Prześlij komentarz