Cezary Duchnowski Programowanie obiektowe w multimediach ...
Cezary Duchnowski Programowanie obiektowe w multimediach ...
Cezary Duchnowski Programowanie obiektowe w multimediach ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Cezary</strong> <strong>Duchnowski</strong><br />
<strong>Programowanie</strong> <strong>obiektowe</strong> w <strong>multimediach</strong>. Środowisko MaxMSP firmy Cycling74.<br />
I. Patcher, organizacja pracy w środowisku max/msp.<br />
1. Charakterystyka obszarów max, msp i jitter.<br />
2. Porządkowanie obiektów i połączeń w rama okna patcherach.<br />
3. Subpatchery.<br />
4. Inspektor Patchera.<br />
II. Obiekty, system połączeń.<br />
1. Argumenty, atrubuty obiektów.<br />
2. Połączenia bezkablowe.<br />
III. Operacje abstrakcyjne.<br />
1. Obiekty automatycznych akcji, kontrola czasu.<br />
2. Kontrola muzycznego czasu, tempo, transport.<br />
3. Delay, timer, clocker.<br />
IV. Interfejsy numeryczne.<br />
V. Struktury danych i prawdopodobieństwa.<br />
VI. MIDI, konfiguracja systemu, porty midi.<br />
VII. MIDI, konfiguracja systemu, porty midi.<br />
VIII. Obiekty i komunikaty midi.<br />
1. Kodowanie i dekodowanie midi.<br />
IX. Komunikacja zewnętrzna.<br />
1. Komunikacja sieciowa – UDP<br />
X. Dystrybucja sygnału audio.<br />
1. Bramkowanie, przesyłanie, krosowanie sygnału audio.<br />
XI. Kontrola audio, techniki syntezy.<br />
1. Sampling.<br />
2. Synteza tablizowa.<br />
3. Reprezentacje klasycznych technik syntezy.<br />
4. Mapowanie midi do audio.<br />
5. Szybka transformata Furiera.<br />
XII. Odtwarzanie klipu video QuickTime.<br />
XIII. Video w czasie rzeczywistym.<br />
XIV. Matrix.<br />
1. Proste przenikanie klipów video jako przykład integracji procesów Jitter z operacjami<br />
maxa.
Niniejszy skrypt omawia ogólne zasady pracy w MaxMSP umoŜliwiające rozpoczęcie<br />
programowania oraz dalszą penetrację moŜliwości tego otwartego środowiska. Praca<br />
zawiera opis podstawowych obiektów. Przykłady są aktywne tylko w skrypcie w formie<br />
aplikacji. Format tekstowy zawiera jedynie poglądowe schematy oraz zrzuty okien.<br />
<strong>Programowanie</strong> w środowisku max/msp polega na łączeniu tzw. obiektów w<br />
przestrzeni patchera lub między patcherami.<br />
Pasek Narzędzi Patchera:<br />
1. Przełącznik stanu pracy<br />
Patcher przyjmuje 2 podstawowe stany:<br />
- lock (stan pracy)<br />
- unlock (stan edycji)<br />
Stan "Unlock" umoŜliwia umieszczanie oraz łączenie obiektów. Umieścić obiekt w przestrzeni<br />
patchera<br />
2. Przycisk wprowadzania nowego obiektu<br />
3. Przycisk nawigacji zbliŜenia<br />
4 . Przycisk przełączenia się w tryb prezentacji.<br />
Tryb prezentacji umoŜliwia porządkowanie przestrzeni roboczej patchera poprzez<br />
wyświetlanie manipulatorów, elementów interfejsu oraz obiektów monitorujących i ukrywanie<br />
pozostałych obiektów oraz połączeń.<br />
5. Przycisk wywołania inspektora wyselekcjonowanego obiektu.<br />
Stałe lub domyślne ustawienia obiektów a takŜe patcherów moŜna definiować z poziomu<br />
tzw. inspektora. MoŜna wywołać go z poziomu paska narzedzi patchera, menu głównego lu<br />
menu podręcznego.<br />
6., 7. Przyciski nadrzędności wyświetlania obiektów.<br />
8. Przycisk wyświetlania lub ukrywania siatki patchera<br />
9. Włączanie lub wyłączanie wyrównywania elementów patchera do zdefiniowanej siatki.
Charakterystyka obszarów max, msp i jitter.<br />
Max, najstarszy genetycznie obszar środowiska, obejmuje operacje liczbowe,<br />
zorientowanych na format midi.<br />
Msp to zbiór obiektów związanych z przetwarzaniem sygnały audio. Obiekty msp posiadają<br />
w nazwie zawsze znak "~". Połączenie msp równieŜ wyróŜnione jest linią w kolorze Ŝółtym.<br />
Jitter jako zbiór obiektów związanych ze strumieniem video. Obiekty jitter poprzedzone są<br />
zawsze prefixem "jit." Połączenia strumienia video oznaczone jest linią w kolorze zielonym.
Porządkowanie obiektów i połączeń w rama okna patcherach.<br />
Obiekty moŜna wyrównywać w pionie lub w poziomie przy pomocy komendy "align" z menu<br />
"Arrange" lub przy pomocy skrótu cmd+Y.<br />
Obiekty moŜna zagnieŜdŜać w oknie zgodnie z siatką patchera przywoływaną z paska<br />
narzędzi lub menu "Viev". Aktywowanie automatycznego wyrównywania do siatki odbywa się<br />
przy pomocy funkcji "snap to grid"<br />
[pasek narzędzi lub menu "View"]. Obie funkcje są aktywne tylko z poziomu patchera w<br />
stanie edycji.
Patchery w patcherach.<br />
Jednym ze sposobów na zredukowanie ilości obiektów i kabli w oknie patchera jest<br />
organizowanie grup obiektów w subpatchery czyli patchery w patcherze. Subpatcher jest<br />
obiektem, który po otwarciu jest niezaleŜnym oknem.<br />
Przy pomocy obiektów "inlet", "in", "outlet","out" moŜliwe jest zdefiniowanie dowolne ilości<br />
wejść i wyjść w celu komunikacji z patcherem nadrzędnym.<br />
Aby zdefiniować wejścia i wyjścia naleŜy z palety obiektów wybrać odpowiednio obiekty<br />
"inlet" i "outlet" lub "in" i "out"
Inspektor Patchera<br />
Ustawienia domyśle oraz wygląd okna patchera moŜna definiować z poziomu Inspektora<br />
patchera. MoŜemy przywołać go z menu kontekstowego wywołanego w wolnym polu okna<br />
lub z menu "View".<br />
Podstawowymi elementami języka max/msp są obiekty oraz komunikaty.<br />
Aby wprowadzić obiekt naleŜy wejść w stan edycji.<br />
MoŜna wstawić obiekt z poziomu paska narzędzi, menu głównego, kontekstowego lub przez<br />
podwójne kliknięcie w wolnej przestrzeni patchera wywołując paletę obiektów.<br />
Obiekty z interfejsem są opatrzone oryginalnymi ikonami i zgrupowane w palecie.<br />
Obiekt wprowadza się przez wybór ikony z palety obiektów lub wprowadzenie nazwy w polu<br />
obiektu.
Argumenty, atrubuty obiektów.<br />
Obiekt to mały program realizujący określone zadania na podstawie zaimplementowanych<br />
na stałe lub wprowadzanych dynamicznie parametrów.<br />
Większość obiektów umoŜliwia dynamiczną zmianę swoich parametrów (atrybutów) lub<br />
właściwości poprzez wprowadzenie ich za pomocą komunikatów lub wartości do<br />
odpowiednich wejść obiektu.<br />
Argument to parametr umieszczony w polu obiektu po nazwie. Parametry moŜna wprowadzić<br />
specjalnie dedykowanym wejściem lub w postaci komunikatu z poprzedzoną nazwą atrybutu.<br />
Metro to obiekt wysyłający impuls (bang) w określonym interwale czasowym. Interwał<br />
wyznaczony jest przez argument ale moŜna go zmienić wprowadzając nową wartość<br />
bezpośrednio prawym wejściem lub lewym wejściem, w postaci komunikatu z poprzedzoną<br />
nazwą atrybutu w tym wypadku to "interval"<br />
Przy aktywnej opcji "Assistance" [menu "Option"] pojawia się opis wejść i wyjść obiektu.<br />
Atrybuty a takŜe inne właciwości obiektu moŜna definiować w inspektorze obiektu. Inspektor<br />
obiektu moŜna wywołać z menu "Object" lub paska narzędzi. Specjalna pozycja myszki z<br />
lewej strony obiektu ujawnia ikonę wywołującą inspektor.<br />
Obiekty posiadają wejścia u góry i wyjścia u dołu w celu łączenia ich między sobą.
Środowisko umoŜliwia takŜe komunikację bezkablową. Najczęściej odbywa się ona przy<br />
pomocy obiektów "send" i "receive" w przypadku maxa oraz "sed~" i receive~" w przypadku<br />
sygnału msp.<br />
Istnieje grupa obiektów, które zajmują się bezkablowym przesyłanie danych.<br />
System pomocy zorganizwany jest w formie aktywnych patcherów. KaŜdemu obiektowi<br />
dedykowano indywidualny patcher pomocy. MoŜna przywołać go przez kliknięcie na obiekt z<br />
wciśniętym klawiszem "alt" lub z menu kontekstowego.<br />
Obiekty "numbers" i listy danych.
Do odbierania, wysyłania bądź wyświetlainia liczb naturalnuch słuŜy obiekt "number"<br />
Odpowiednikiem pracującym na liczbach rzeczywistych jest "float".<br />
Max często operuje danymi zgrupowanymi w tzw, listy, Do konstruowania, porządkowania i<br />
przetwarzania list słuŜą takie obiekty jak: "pack", "unpack", "pak", "czy "zl".<br />
Grupa obiektów "zl" zajmuje się przetwarzaniem list.<br />
Szczegółowe instrukcje o obiektach zl moŜna odnaleźć w pliku pomocy: zl.maxhelp<br />
przykład:<br />
Przy pomocy obiektu "makenote" moŜemy skonstruować nutę midi o zadanym czasie<br />
trwania. Atrybuty moŜna wprowadzać niezaleŜnie dedykowanymi wejściami lub w postaci<br />
listy.<br />
Proste operacje matematyczne.<br />
Obiekty automatycznych akcji, kontrola czasu.
metro<br />
"Metro" jest obiektem wysyłającym impuls (bang) w określonym interwale czasowym. MoŜna<br />
go zmieniać dynamicznie wprowadzając nową wartość atrybutu "interval" w prawym wejściu.<br />
counter<br />
"Counter" to swoisty licznik z moŜliwością zdefiniowania kierunku, wartości minimalnej i<br />
maksymalnej liczenia.<br />
Kontrola muzycznego czasu, tempo, transport.<br />
tempo<br />
"Transport" jest połączeniem obiektów: "metro" i "counter" operującym wartościami czasowe<br />
charakterystyczne dla terminologii muzycznej.
transport<br />
"Transport" pozwala na globalną kontrolę czasu i raport jednostek metrycznych w ramach<br />
zdefiniowanego tempa BPM i metrum.<br />
delay<br />
"Delay" opóźnia impuls o zdefiniowany interwał czasowy.
clocker<br />
"Clocker" wyświetla upływający czas w milisekundach lub jednostkach metrycznych w<br />
synchronizacji z naczelnym transportem.<br />
Interfejsy numeryczne.<br />
Slider, dial<br />
"Multislider" to obiekt łączący w sobie kilka suwaków. Ich wartości wysyłane są w postaci<br />
listy. "Rslider" pozwala przy pomocy specjalnego interfejsu zdefiniować zakres wartości.<br />
"Nslider" wysyła wysokość wyświetlanej nuty. "Pictslider" pozwala definiować połoŜenie<br />
względem osi x, y
Struktury danych i prawdopodobieństwa.<br />
tablice<br />
"Table" i "itable" to obiekty zapisujące pary liczb umoŜliwiające prostą edycję w polu osi x i y.<br />
Do mapowania, indeksowania oraz innego typu porządkowania danych słuŜą obiekty:<br />
"funbuff" coll, histo.<br />
Obiekt "coll" zajmuje się indeksowaniem danych. W tym przypadku mogą być to zarówno<br />
liczby rzeczywiste jak i symbole. Istnieje moŜliwość edycji danych w podstawowym edytorze
tekstowy po podwójnym kliknięciu obiektu.<br />
MIDI<br />
Max komunikuje się przy pomocy formatu midi poprzez fizyczne porty podłączonych do<br />
komputera interfejsów midi lub przez wirtualne 2 porty "to MaxMSP", "from MaxMSP". Aby<br />
łatwo definiować porty midi przypisuje się im skróty w oknie "MIDI Setup" wywoływanym z<br />
poziomu manu "Option"<br />
Generalnie komunikacja midi odbywa się przy pomocy obiektów "midiin" i "midiout". Istnieją<br />
jednak specjalne obiekty wysyłające i przyjmujące konkretne typy komunikatów midi np.<br />
komunikaty "note on" moŜna przesyłać przy pomocy obiektów "notein", "noteout";<br />
komunikaty "control change"- przy pomocy obiektów "ctlin", "ctlout".<br />
Aby zdefiniować port midi naleŜy przypisany mu skrót lub dokładną systemową nazwę<br />
umieścić jako pierwszy argument. MoŜna takŜe przy pomocy podwójnego kliknięcia w obiekt<br />
wybrać port z menu podręcznego.<br />
Obiekt "midiinfo" pozwala zidentyfikować wszystkie dostępne w systemie porty midi.
Obiekty i komunikaty midi.<br />
Przy pomocy obiektu "notein" max widzi wszystkie komunikaty typu note on/off przychodzące<br />
zdefiniowanym portem, np. z zewnętrznej klawiatury midi.<br />
Analogiczne przy pomocy obiektu "noteout" dwu- lub trzy elementowa lista liczb moŜe być<br />
sformatowana i wysłana jako komunikat "note on/off".<br />
Podobnie działają obiekty "ctlin", "ctlout" przetwarzające komunikaty typu "control change".
Kodowanie i dekodowanie midi.<br />
Format midi moŜna rozkodować przy pomocy obiektu "midiparse".<br />
Wygenerowane w środowisku max dane moŜna zakodować w midi i wysłać zdefiniowanym<br />
portem midi.
Komunikacja zewnętrzna.<br />
Interfejsy midi nie są jedyną formą kontaktu świata zewnętrznego z maxem. Do kontroli<br />
danych moŜna uŜyć klawiatury komputerowej, trackpada a takŜe innych urządzeń<br />
peryferyjnych tzw. human interfaces działających w z systemem operacyjny komputera np.<br />
joystick na USB.<br />
Obiekt "key" wyświetla kod naciśniętego klawisza klawiatury komputera.<br />
Obiekt "keyup" analogicznie wyświetla kod zwolnionego klawisza klawiatury komputera<br />
"hi" pozwala przejąć wartości manipulatorów zewnętrznych.<br />
Komunikacja sieciowa - UDP<br />
Dane moŜna przesyłać trakŜe przy uŜyciu protokołu sieciowego UDP. Zajmują się tym<br />
obiekty: "udpsend" oraz "udpreceive". "udpsend"" wymaga zdefiniowania adresu IP lub<br />
nazwy hosta stacji docelowej oraz numeru portu przesyłu danych. Natomiast "Udpreceive"<br />
wymaga w argumencie numeru portu.
Dystrybucja sygnału audio.<br />
Aby umoŜliwić dystrybucję sygnału audio naleŜy uaktywnić tzw. DSP (Digital signal<br />
processing).<br />
Ustawień systemu audio moŜna dokonać z poziomu okna "DSP Status" wywołanego z menu<br />
"Option".<br />
Tu naleŜy wybrać sterownik interfejsu audio, jego parametry pracy a takŜe mapowanie<br />
wirtualnych i fizycznych wejść oraz wyjść systemu audio.<br />
Wejście sygnału audio moŜliwe jest przez obiekt "adc~" zaś wyjście przez obiekt "dac~".<br />
Uruchomienie systemu audio moŜliwe jest takŜe poprzez podłączony do "dac~" lub "adc~"<br />
włącznika (toogle). Włączenie i wyłączenie systemu audio dotyczy wszystkich patcherów.<br />
Podobnie działają komunikaty "start" i "stop". Przy uŜyciu komunikaty "startwindow" moŜliwe<br />
jest uruchomienie DSP tylko w danym patcherze i jego subpatcherach<br />
Obiekty "ezadc~" i "ezdac~" to dwukanałowe wersje "adcZ" i "dac~". Posiadają interfejs<br />
graficzny w postaci przycisków aktywujących lub dezaktywujących system DSP.
Bramkowanie, przesyłanie, krosowanie sygnału audio.<br />
Argumenty obiektów adc~ i dac~ definiują wirtualne kanały systemu DSP. O tym jakie są im<br />
przypisane fizyczne kanały interfejsu audio decyduje konfiguracja "I/O Mapping" w "DSP<br />
Status".<br />
MoŜliwe jest równieŜ bezkablowe przysałnie sygnału audio przy pomocy obiektów "send~",<br />
"receive~".<br />
Obiekt "matrix~" umoŜliwia dowolne krosowanie sygnałów audio. Argument określa ilość<br />
wejść i wyjść. Obiekt "matrixctrl" pozwala w prosty sposób kontrolować krosowanie.
Kontrola audio, techniki syntezy.<br />
Kontrola poziomu. Aby zmienić poziom sygnały wystarczy go pomnoŜyć przez wartoś<br />
z pzredziału 0 - 1.<br />
Głównym narzędziem do czytania próbki z tablicy jest obiekt "buffer~". Sposobów czytania z<br />
tablicy jest wiele. Są one uzaleŜnione od sposobu i wygody dokonywanych operacji. Do<br />
bufora moŜna wczytać próbkę przy pomocy komunikaty "read" lub wprowadzić jej nazwę w<br />
polu argumentów. Argumentem jest nazwa bufora oraz opcjonalnie nazwa piliku<br />
dźwiękowego, czas w ms i ilość kanałów.<br />
Podwójne kliknięcie w obiekt buffer~ powoduje wyświetlenie obwiedni amplitudy wczytanej<br />
próbki.
Sampling, nagrywanie i odtwarzanie audio.<br />
Do czytania plików dźwiękowych z dysku słuŜy obiekt "sfplay~". Czyta formaty AIFF,<br />
NeXT/SUN(.au), WAVE i Raw - maksymalnie 32-kanałowe.
Synteza tablicowa, play~, record~, groove~.<br />
Podstawowe obiekty pracujące na obiekcie buffer~ to "play~", "groove~" i "record~". "Play~",<br />
"groove~" zajmują się czytaniem z bufora natomiast "record" zapisywaniem do bufora.
Obiekt "record~".
Synteza addytywna.<br />
FM - Modulacja częstotliwości.<br />
AM - Modulacja amplitudy.<br />
Waveshaping - Modulacja kształtowania fali.
Mapowanie midi do audio.<br />
Przy pomocy midi moŜna kontrolować parametry audio.<br />
Kontrola amplitudy przez midi.<br />
Kontrola wysokości przez midi.
Szybka transformata Furiera.<br />
MaxMSP umoŜliwia szybką transformatę Fouriera i operację na zanalizowanym materiale.<br />
W ramach subpatchera "pfft" moŜna dokonywać operacji spektralnych.<br />
"Gizmo~" jest obiektem pracującym w ramach subpatchera pfft.
Odtwarzanie klipu video QuickTime.<br />
Obiekt "jit.qt.movi" umoŜliwia odtworzenie klipu vide w formacie zgodnym z Quick Time.<br />
Video w czasie rzeczywistym.<br />
Zewnętrzny sygnał video moŜna przechwytywać przy pomocy obiektu "jit.qt.grab. Istnieje<br />
moŜliwość zapisania przechwyconego sygnału na dysku.
Matrix<br />
Matrix jest rodzajem wielopoziomowej pamięci, pozwalającej na modyfikacje duŜej ilości<br />
danych poprzez umieszczanie ich w wirtualnej siatce.
Proste przenikanie klipów video jako przykład integracji procesów Jitter z operacjami maxa.<br />
Środowisko MaxMSP/Jitter z łatwą moŜliwością syntezy i resyntezy sygnału midi, audio oraz video<br />
pozwala na praktycznie nieograniczoną kontrolę, organizację a takŜe interakcje parametrów mediów<br />
audialnych i wizualnych.<br />
Więcej przykładów i szczegółowy opis obiektów, ich zastosowań moŜna odnaleźć w precyzyjnie<br />
opracowanym systemie pomocy wraz z pakietem „Tutorials“.