18.04.2014 Views

Cezary Duchnowski Programowanie obiektowe w multimediach ...

Cezary Duchnowski Programowanie obiektowe w multimediach ...

Cezary Duchnowski Programowanie obiektowe w multimediach ...

SHOW MORE
SHOW LESS

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“.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!