Części składowe języka HTML
Ten rozdział zaczyna się od przedstawienia sposobów na wykorzystanie obiektu Sound (dźwiękowego) - obiektu Flasha odpowiadającego za kontrolę dźwięku przy wykorzystaniu języka ActionScript. Powinieneś do tego momentu mieć ogólne pojęcie o posługiwaniu się dźwiękiem we Flashu, włączając w to choćby importowanie plików dźwiękowych i przypisywanie ich do ujęć kluczowych za pomocą opcji Event, Start, Stop i Stream Sync. Jeśli nie masz pewności co do używania którejś z tych metod, poszukaj dodatkowych informacji w dokumentacji programu. Dzięki temu rozdziałowi; nauczysz się, jak wykorzystać obiekt dźwiękowy do odtwarzania dźwięków bezpośrednio z biblioteki, bez umieszczania ich w ujęciach kluczowych. Zobaczysz, w jaki sposób ustawiać poziom głośności i balans dźwięku, korzystając z dynamicznego systemu kontroli opartego na interakcji z użytkownikiem i właściwościach filmu, poznasz też sposób udostępniania użytkownikowi kontrolerów głośności i balansu pomiędzy kanałami. Nauczysz się, jak zarządzać dźwiękami, trzymając je poza środowiskiem projektu Flasha w postaci zewnętrznych filmów, co oznacza, że będziesz mógł stworzyć np. odgrywarkę plików dźwiękowych, przy czym pliki te będą przechowywane poza głównym interfejsem.
|
Przyłączanie pliku dźwiękowego do ujęcia kluczowego na listwie czasowej jest łatwym sposobem na wprowadzenie dźwięków do twojego filmu. Dwa podstawowe sposoby integrowania filmu z dźwiękiem to użycie opcji Event Sync do odgrywania dźwięków towarzyszących zdarzeniom, np. wciśnięcia przycisku, oraz wykorzystanie opcji Stream Sync do synchronizacji dialogu z animacją. Jeśli jednak musisz mieć kontrolę nad tym, kiedy dźwięk jest odgrywany, lub też chciałbyś dynamicznie zmieniać jego natężenie (także w poszczególnych kanałach), skorzystaj z obiektu dźwiękowego. Obiekt dźwiękowy (Sound) jest zdefiniowaną klasą Flasha, której metody umożliwiają kontrolowanie plików dźwiękowych importowanych i przechowywanych w bibliotece. Podobnie jak w przypadku obiektu koloru (Color), żeby użyć obiektu dźwiękowego, trzeba utworzyć jego klon za pomocą funkcji konstruktora i nadać mu nazwę. Kiedy już obiekt dźwiękowy posiada nazwę, można używać go do odgrywania i modyfikowania plików dźwiękowych przechowywanych w twojej bibliotece.
|
|
Rys. 8.1. Wpisz mySound jako nazwę twojego obiektu dźwiękowego i pozostaw pole Expression niezaznaczone
Rys. 8.2. Funkcja konstruktora new Sound tworzy klon nowego obiektu dźwiękowego
Rys. 8.3. Kiedy użytkownik zwolni przycisk, Flash utworzy obiekt dźwiękowy o nazwie mySound
|
W celu utworzenia
Wybrany plik dźwiękowy pojawi się w bibliotece.
Zaznacz pole Expression. W polu Value pojawi się funkcja konstruktora newSound, z podświetlonym argumentem target (rys. 8.2).
|
Jeśli posiadasz w swojej bibliotece wiele zaimportowanych dźwięków, musisz przekazać obiektowi dźwiękowemu, który dźwięk ma być odtworzony lub kontrolowany. Poszczególne dźwięki w bibliotece identyfikuje się za pomocą opcji Linkage, podobnie jak to robiłeś w rozdziale 7., kiedy przyłączałeś klip filmowy z biblioteki do klipu filmowego na scenie. Poza identyfikowaniem dźwięku, opcja Linkage umożliwia wyeksportowanie go z plikiem SWF, aby był dostępny dla wywołującego go obiektu dźwiękowego. Po zidentyfikowaniu dźwięku za pomocą opcji Linkage, możesz przyłączyć go do obiektu dźwiękowego, korzystając z metody attachSound.
W celu przyłączenia
Pojawi się okno dialogowe Symbol Linkage Properties.
Flash wyeksportuje zaznaczony dźwięk w pliku SWF z unikalnym identyfikatorem, dzięki czemu dźwięk ten będzie możliwy do odtworzenia po wywołaniu go przez obiekt dźwiękowy.
Zaznaczając to wyrażenie, sprawiasz, że następne wyrażenie ActionScript pojawi się pod nim.
|
Rys. 8.4. Dla każdego dźwięku, który chcesz przyłączyć, wybierz opcję Linkage z menu biblioteki
Rys. 8.5. Ten dźwięk nosi nazwę narration i zostanie dołączony do eksportowanego pliku SWF
|
Rys. 8.6. Metoda attachSound wymaga podania argumentu idName, który jest identyfikatorem twojego dźwięku w bibliotece
Rys. 8.7. Metoda attachSound przyłącza dźwięk zidentyfikowany jako narration do obiektu dźwiękowego mySound
|
To bardzo ważne, żeby umieszczać identyfikator pliku dźwiękowego w cudzysłowie. Znak ten mówi Flashowi, że otoczone nim słowo jest rzeczywistą nazwą identyfikatora, a nie wyrażeniem, które powinien oszacować w celu określenia nazwy identyfikatora. Wskazówka
|
Skoro już utworzyłeś nowy obiekt dźwiękowy i przyłączyłeś do niego dźwięk z biblioteki, możesz wreszcie odtworzyć ten dźwięk. Użyj metody start do odegrania dźwięku przyłączonego do obiektu dźwiękowego. Metoda start ma dwa parametry, secondOffset oraz loops. Parametr secondOffset jest liczbą określającą, od której sekundy czasu trwania dźwięku ma się rozpocząć jego odtwarzanie. Możesz tak ustawić ten parametr, żeby dźwięk był odtwarzany od początku lub od późniejszego momentu. Jeśli, na przykład, masz 20-sekundowy dźwięk przyłączony do obiektu dźwiękowego, to ustalając parametr secondOffset na 10, sprawisz, że odgrywanie dźwięku zacznie się od jego środka. Nie oznacza to opóźnienia w odtwarzaniu o 10 sekund, tylko niezwłoczne rozpoczęcie odtwarzania od punktu oznaczonego jako „dziesiąta sekunda czasu trwania dźwięku”. Parametr loops to liczba określająca, ile razy dźwięk ma być odtworzony. Ustawienie tego parametru na wartość 2 spowoduje dwukrotne odtworzenie dźwięku, bez żadnej przerwy. Ten parametr jest opcjonalny. W celu odtworzenia dźwięku:
Czyniąc to, zyskujesz pewność, że kolejne wyrażenie pojawi się pod tym zaznaczonym.
W oknie skryptu pojawi się nowe wyrażenie.
|
|
Rys. 8.8. Metoda strat jest dodawana do skryptu po utworzeniu obiektu mySound i przyłączeniu dźwięku narration. Metoda start wymaga określenia argumentów secondOffset i loops
Drugi przycisk: on (release) { mySound.attachSound("Jazz"); } Trzeci przycisk: on (release) { mySound.start(0,1) } Kiedy klikniesz pierwszy przycisk, a potem trzeci, usłyszysz dźwięk Hawaiian. Kiedy klikniesz drugi przycisk, a potem trzeci, usłyszysz dźwięk Jazz. Jeśli rozpoczniesz odtwarzanie dźwięku Jazz, zanim wybrzmi do końca dźwięk Hawaiian, usłyszysz, jak dźwięki nakładają się na siebie. |
W polu Expression, za nazwą obiektu dźwiękowego, pojawi się metoda start z podświetlonymi dwoma parametrami: secondOffset oraz loops (rys. 8.8).
Wskazówki
Ujęcie pierwsze (tworzenie klonu mySound): mySound = new Sound (); Pierwszy przycisk: on (release) { mySound.attachSound("Hawaiian"); } |
Poniżej manipulatora zdarzenia myszy on (release) pojawi się nowe wyrażenie, a blok edycji parametrów będzie zawierał puste pole Expression.
Kiedy użytkownik zwolni przycisk, dowolny dźwięk przyłączony do obiektu dźwiękowego - i aktualnie odgrywany - zamilknie. Możesz zatrzymać odgrywanie wszystkich dźwięków bez wyjątku, jeśli użyjesz podstawowej akcji stopAllSounds. W celu zatrzymania odgrywania wszystkich dźwięków:
Akcję tę możesz przypisać do przycisku, jak w poprzednim ćwiczeniu, lub do ujęcia kluczowego, a Flash przerwie odtwarzanie wszystkich dźwięków, obojętnie czy przyłączonych do obiektu dźwiękowego, czy też odtwarzanych z listwy czasowej za pomocą opcji Event, Start lub Stream.
|
Rys. 8.9. Powyższa metoda stop zatrzymuje odtwarzanie dowolnego dźwięku przyłączonego do obiektu dźwiękowego mySound. Dla metody tej nie istnieją żadne argumenty
|
|
Modyfikowanie dźwięków Kiedy używasz obiektu dźwiękowego, Flash umożliwia ci kontrolowanie ogólnej głośności odtwarzanych dźwięków, a także głośności w poszczególnych kanałach (lewym i prawym), co nazywa się regulacją panoramy (inaczej: balans - przyp. tłum.). Mając takie możliwości, łatwo jest utworzyć interfejs pozwalający ustawiać poziom głosu w zależności od ich preferencji, czy też w ogóle tworzyć bardziej realistyczne środowiska. Przykładowo, w grze wyścigowej poziom dźwięku mógłby narastać, kiedy mijasz się z samochodem rywala. Wprowadzając regulację panoramy dźwięku w grze Pong, możesz zwiększyć doznania słuchowe graczy, jako że piłka uderzająca w jedną ze ścian wyzwalałaby dźwięk słyszalny z właściwej dla uderzenia strony (czyli np. z lewego kanału, jeśli uderzyła w lewą ścianę - przyp. tłum.). Dwie metody, za pomocą których modyfikuje się dźwięk, to setVolume (głośność) i setPan (panorama). Metoda setVolume przyjmuje jako argument wartość w przedziale od 0 do 100, przy czym 100 oznacza maksymalną głośność, a 0 - ciszę. Metoda setPan przyjmuje jako argument wartość w przedziale od -100 do 100, gdzie -100 oznacza, że dźwięk będzie odtwarzany wyłącznie przez lewy kanał, a 100, odpowiednio przez prawy kanał. Ustawienie 0 rozdziela dźwięk równo na obydwa kanały. W celu ustawienia głośności dźwięku:
Poniżej manipulatora zdarzenia myszy on (release) pojawi się nowe wyrażenie, a blok edycji parametrów będzie zawierał puste pole Expression.
|
Kiedy odtwarzając dźwięk, zwolnisz przycisk, głośność zmieni się stosownie do wprowadzonej wartości parametru volume. Wskazówka
|
Rys. 8.10. Metoda setVolume wymaga podania parametru volume (głośność)
Rys. 8.11. Głośność dla obiektu dźwiękowego mySound ustawiono na 20 procent
|
Rys. 8.12. Metoda setPan wymaga podania parametru pan, liczby w zakresie od -100 do 100
Rys. 8.13. Panorama dla obiektu dźwiękowego mySound jest ustawiona na 100, więc dźwięk będzie dobywał się tylko z prawego głośnika
|
W celu
Poniżej manipulatora zdarzenia myszy on (release) pojawi się nowe wyrażenie, a blok edycji parametrów będzie zawierał puste pole Expression.
W polu Expression, zaraz za obiektem dźwiękowym, pojawi się metoda setPan, z podświetlonym parametrem pan (rys. 8.12).
Kiedy odtwarzając dźwięk, zwolnisz przycisk, panorama dźwięku zmieni się stosownie do wprowadzonej wartości parametru pan.
|
Jeśli utworzysz klon obiektu dźwiękowego i ustawisz dla niego parametry, jak w wyrażeniu mySound = new Sound (), metody setVolume i setPan będą miały działanie o charakterze globalnym, kontrolując wszystkie dźwięki z głównej listwy czasowej. Nawet jeśli utworzysz dwa oddzielne obiekty dźwiękowe, jak te poniżej, mySound1 = new Sound (); mySound2 = new Sound (); nie będziesz mógł użyć metody setPan do odtwarzania dźwięku mySoun1 przez lewy kanał i dźwięku mySound2 przez kanał prawy. Jeśli chcesz modyfikować dźwięki niezależnie, musisz tworzyć swoje obiekty dźwiękowe wraz ze ścieżkami dostępu do klipów filmowych. Wówczas obiekty dźwiękowe będą przypisywane do różnych klipów filmowych i metod setVolume oraz setPan będzie można używać do kontrolowania tych dźwięków oddzielnie.
W celu
|
Rys. 8.14. Nadaj każdemu zaimportowanemu dźwiękowi identyfikator w oknie dialogowym Symbol Linkage Properties
Rys. 8.15. Umieść dwa klony klipu filmowego na scenie jako odnośniki dla nowych obiektów dźwiękowych. Dwa klony klipów filmowych powyżej noszą nazwy movieClip1 oraz movieClip2
|
Rys. 8.16. Utworzono obiekt dźwiękowy mySound1 z odwołaniem do klipu filmowego movieClip1
Rys. 8.17. Powyższa metoda start odgrywa dźwięk musicSample1. Zwróć uwagę, że chociaż dźwięk mySound odwołuje się do klipu filmowego movieClip1, klip ten nie musi być umieszczany w ścieżce dostępu w celu wywołania metod attachSound lub start. Metody te odnoszą się do obiektu dźwiękowego, a nie do wskazanego klonu klipu filmowego
Rys. 8.18. Obiekt dźwiękowy mySound2 odwołuje się do klipu filmowego movieClip2 i odgrywa dźwięk musicSample2
|
|
Ten przycisk powoduje odtworzenie pierwszego dźwięku tylko w lewym głośniku.
Ten przycisk powoduje odtworzenie drugiego dźwięku tylko w prawym głośniku.
Wskazówka
|
Rys. 8.19. Metoda setPan obiektu mySound1 odgrywa dźwięk musicSample1 tylko w lewym głośniku
Rys. 8.20. Metoda setPan obiektu mySound2 odgrywa dźwięk musicSample2 tylko w prawym głośniku
|
Rys. 8.21. Parametry metody setTransform określają rozdział dźwięku na głośniki lewy i prawy. Pierwsza litera oznacza głośnik
|
Transformowanie dźwięków Dla zaawansowanych użytkowników, którzy chcą mieć większą kontrolę nad odtwarzaniem dźwięku w poszczególnych kanałach, Flash udostępnia metodę setTransform. Metoda ta pozwala określić procentowe wartości parametrów, które decydują, jaki poziom dźwięku z lewego lub prawego kanału będzie słyszalny w lewym bądź prawym głośniku. Dzięki tej metodzie twój dźwięk może dynamicznie przenosić się z lewego głośnika do prawego lub przełączać pomiędzy trybami mono i stereo. Metoda setTransform obiektu dźwiękowego jest bardzo zbliżona do metody setTransform obiektu koloru, omawianej w rozdziale 7. I tak jak w przypadku obiektu koloru - użycie metody setTransform wraz z obiektem dźwiękowym wymaga wcześniejszego utworzenia podstawowego obiektu, którego zadaniem będzie przechowywanie informacji o rozdzieleniu dźwięku pomiędzy kanały lewy i prawy. Parametrami obiektu transformacji dźwięku są ll, lr, rr i rl (rys. 8.21). Opis ich funkcjonowania przedstawia tabela 8.1.
|
|
Tabela 8.1. Parametry metody setTransform obiektu dźwiękowego |
|
|
Parametr Wartość |
|
|
ll |
Wartość procentowa, określająca poziom głośności lewego kanału sygnału dźwiękowego w lewym głośniku. |
|
lr |
Wartość procentowa, określająca poziom głośności prawego kanału sygnału dźwiękowego w lewym głośniku. |
|
rr |
Wartość procentowa, określająca poziom głośności prawego kanału sygnału dźwiękowego w prawym głośniku. |
|
rl |
Wartość procentowa, określająca poziom głośności lewego kanału sygnału dźwiękowego w prawym głośniku. |
|
|
|
|
|
|
W ten sposób przygotowałeś klon obiektu transformacji dźwięku.
|
Rys. 8.22. Ten dźwięk został zidentyfikowany jako musicSample za pomocą opcji Linkage w menu biblioteki
Rys. 8.23. Tworzymy obiekt dźwiękowy mySound
Rys. 8.24. Dźwięk musicSample jest odgrywany z obiektu dźwiękowego mySound
|
Rys. 8.26. Cztery parametry metody setTransform są definiowane jako właściwości obiektu mySoundTransform
Rys. 8.27. Metoda setTransform wymaga podania parametru sxform lub wskazania obiektu transformacji dźwięku
Rys. 8.28. Cztery parametry metody setTransform ,zdefiniowane w obiekcie mySoundTransform, dostarczają do metody niezbędnych informacji
|
Ten przycisk tworzy podstawowy obiekt do przechowywania informacji o transformacji dźwięku. Informacja taka jest później podstawiana do obiektu dźwiękowego przy pomocy metody setTransform.
|
Jednym z najbardziej efektywnych sposobów wykorzystania obiektu dźwiękowego i jego metod jest tworzenie systemów dynamicznej kontroli dźwięku, dzięki którym użytkownik może sam ustalać pożądany poziom głośności oraz panoramę. Podstawową koncepcją w tym zakresie jest przygotowanie przeciąganego klipu filmowego, zachowującego się jak suwak. Przypisując odpowiednią pozycję przeciąganego klipu filmowego do parametru głośności (volume) metody setVolume, zyskasz możliwość zmiany poziomu głośności w momencie przesuwania klipu filmowego. W przypadku pionowego suwaka, odpowiadającego za ustawianie głośności, mamy do czynienia z dwoma elementami: właściwym uchwytem oraz ścieżką, po której się on porusza (rys. 8.29). Zacznij od utworzenia klipu filmowego o nazwie groove. Żeby ułatwić sobie zadanie, niech klip filmowy będzie wysoki na 100 pikseli, z punktem środkowym w dolnej części prostokąta. Dzięki wybraniu takiej właśnie wysokości klipu, łatwiej będzie przyporządkować pozycję suwaka danej wartości parametru setVolume. W celu utworzenia przeciąganego suwaka, umieść niewidzialny przycisk wewnątrz klipu filmowego suwaka, przypisującego akcję startDrag i wymuszającego ruch względem klipu filmowego groove.
|
Rys. 8.29. Komponenty systemu kontroli dźwięku to suwak poruszający się w górę i w dół oraz jego ścieżka
|
Rys. 8.30. Ten klon klipu filmowego został nazwany groove i będzie ograniczał ruch przeciąganego klipu filmowego
Rys. 8.31. Parametry Constrain to rectangle ograniczają klip filmowy suwaka od punktu środkowego do 100 pikseli powyżej punktu środkowego klipu filmowego ścieżki
Rys. 8.32. Klip filmowy suwaka można przeciągać wzdłuż klipu filmowego ścieżki
|
W celu osadzenia suwaka na ścieżce
|
Drugi etap tworzenia systemu dynamicznej kontroli głośności to wzajemne przyporządkowanie współrzędnej y położenia suwaka oraz parametru metody setVolume. Górny punkt ścieżki ma odpowiadać poziomowi głośności 100, a jej dolna część - poziomowi głośności 0 (rys. 8.33). Tylko jak dopasować współrzędne y poruszającego się suwaka do liczb z zakresu 0 do 100? Jednym ze sposobów jest posłużenie się metodą globaltoLocal, która dokonuje konwersji współrzędnych położenia suwaka na współrzędne odpowiadające klipowi filmowemu ścieżki. Jako że klip filmowy ścieżki ma wysokość 100 pikseli, a suwak jest dopasowany do jego wysokości, współrzędne lokalne ścieżki można z łatwością odnieść do ustawień głośności (rys. 8.34).
W celu przekształcenia
|
Rys. 8.33. Parametry setVolume muszą odpowiadać pozycji suwaka na ścieżce
Rys. 8.34. Współrzędne globalne suwaka są określone przez główną listwę czasową sceny. Współrzędne lokalne są uzależnione od klipu filmowego ścieżki
Rys. 8.35. Obiekt punktu myPoint jest tworzony z podstawowej klasy obiektów
|
Rys. 8.36. Współrzędna myPoint.y zostaje przypisana do współrzędnej y położenia klipu filmowego suwaka
Rys. 8.37. Współrzędne obiektu punktu myPoint (myPoint.x i myPoint.y) zostają zamienione na współrzędne lokalne klipu filmowego ścieżki
|
W ten sposób właściwość y zostaje ustawiona tak, by odpowiadać współrzędnej y położenia przeciąganego klipu filmowego.
|
Współrzędna y położenia suwaka zmienia się od -100 do 0. Mnożąc obiekt punktu (myPoint) przez -1, zmieniasz ten zakres na 100 do 0 (rys. 8.39).
Teraz, przeciągając suwak w górę lub w dół, będziesz mógł zmieniać poziom głośności dźwięku.
|
Rys. 8.38. Kolejny przycisk rozpoczyna odgrywanie dźwięku musicSample
Rys. 8.39. Klip filmowy ścieżki ma wysokość 100 pikseli i punkt środkowy umieszczony przy dolnej krawędzi. Stąd współrzędne lokalne tego klipu mogą przyjmować wartości w zakresie -100 do 0. Jeśli chcesz zmienić ten zakres, wykonaj mnożenie przez (-1). W rezultacie otrzymasz zakres od 100 do 0 przy dolnej krawędzi, używany przez parametr setVolume
|
Rys. 8.40. Za pomocą opcji Stream Sync dźwięk przypisuje się do określonych klatek na listwie czasowej
|
Używanie dźwięków Zawsze, gdy używasz okna dialogowego Symbol Linkage Properties do zidentyfikowania dźwięku w bibliotece i zaznaczenia go w celu wyeksportowania, dźwięk ten jest dodawany do pliku SWF, powiększając jego rozmiar. Dźwięki zajmują ogromną ilość miejsca, nawet z kompresją MP3, musisz więc starannie oceniać potrzebę dołączania dźwięków do filmu. Jednym ze sposobów takiego zarządzania plikami dźwiękowymi, by zachować minimalny rozmiar pliku wynikowego, jest przechowywanie ich w zewnętrznych filmach Flasha. Używaj akcji loadMovieNum do wprowadzania dźwięku do Flasha tylko wtedy, kiedy naprawdę go potrzebujesz. Możliwe jest także zmienianie dźwięku w zewnętrznym filmie Flasha bez dokonywania poprawek w głównym filmie. Przykładowo, możesz udostępnić użytkownikowi kilka ścieżek dźwiękowych do wyboru. Jednak do uruchomienia którejkolwiek z nich użyj akcji loadMovieNum, a do wyłączenia muzyki posłuż się akcją unloadMovieNum. Możesz również zrobić tak, żeby jeden zewnętrzny plik SWF uruchamiał wczytywanie innego pliku, także losowo wybranego. Dzięki temu można uzyskać funkcję wybierającą losowo ścieżkę dźwiękową z kolekcji przechowywanej w zewnętrznych plikach.
W celu odtworzenia dźwięku
|
W celu zatrzymania
Wskazówki
|
Rys. 8.41. Powyższe akcje, przypisane do przycisku, powodują wczytanie pliku music.swf
Rys. 8.42. Powyższe akcje, przypisane do przycisku, usuwają dowolny plik znajdujący się na poziomie 1
|
Rozdział 8.
258
257
Kontrolowanie dźwięku
8
Kontrolowanie dźwięku
Przyłączanie dźwięków
Obiekt dźwiękowy
y=100
x=120
(0,0)
Scena
Współrzędne globalne (120, 100), współrzędne lokalne określone względem klipu filmowego ścieżki (0, -20)
Klip filmowy ścieżki
Klip filmowy suwaka
Klip filmowy suwaka
Klip filmowy ścieżki
Lewy kanał sygnału wejściowego
Prawy kanał sygnału wejściowego
Lewy głośnik
Prawy głośnik
rl
ll
lr
rr
Ścieżka
Suwak
Odtwarzanie dźwięków
Odtwarzanie dźwięków
Modyfikowanie dźwięków
Niezależne dźwięki
Niezależne dźwięki
Transformowanie dźwięków
Dynamiczna kontrola dźwięków
Dynamiczna kontrola dźwięków
Dynamiczna kontrola dźwięków
Dźwięki jako pliki zewnętrzne
Kontrolowanie dźwięku
Obiekt dźwiękowy
Przyłączanie dźwięków
Odtwarzanie dźwięków
Modyfikowanie dźwięków
Modyfikowanie dźwięków
Niezależne dźwięki
Transformowanie dźwięków
Transformowanie dźwięków
Dynamiczna kontrola dźwięków
Dynamiczna kontrola dźwięków
Dźwięki jako pliki zewnętrzne