Dźwięki w 3D

Wstęp


Standardowo muzyka i dźwięki są odtwarzane w taki sam sposób dla każdego miejsca w którym stoi gracz. Na pewno spotkałeś się w grach z czymś takim jak to że postacie które się do nas zbliżają robią inny hałas gdy są od nas daleko (dźwięki chodzenia cichsze), a inne kiedy chodzą zaraz obok nas (dźwięki są głośniejsze). W tym poradniku dowiesz się jak można osiągnąć taki efekt w SFML.

Dźwięki mogą zostać uprzestrzennione jedynie tylko wtedy gdy posiadają pojedynczy kanał, czyli są mono. Ten efekt jest wyłączony dla dźwięków, które posiadają więcej kanałów, ponieważ należy wyraźnie zaznaczyć w jaki sposób mają zostać odtworzone.

 

Słuchasz (listener)


Cała muzyka i dźwięki będzie miała swojego odbiorcę, którego nazywamy listener’em. To w jaki sposób on będzie odbierał dźwięki to w ten sposób będzie je słyszał gracz przez swoje głośniki.

W SFML klasa która zajmuje się odbieraniem i przekazywaniem dźwięków w odpowiedni sposób do gracza to sf::Listener. Ta klasa jest unikalna sama w sobie i posiada jedynie funkcje statyczne.

Aby uzyskać efekt dźwięków 3D należy na początku ustawić pozycję słuchacza na scenie:

Jak widzimy podajemy pozycję w 3D (x,y,z), oczywiście w przypadku gry 2D możesz pozycję Y możesz ustawić na 0.

Możesz także dodatkowo ustawić stronę, w którą zwrócony jest gracz:

W tym wypadku słuchacz jest zwrócony w stronę dodatniej osi X, co oznacza że że dźwięk z pozycji (15, 0, 5) będzie słyszalny z prawego głośnika.

Pozostało nam jeszcze ustawić globalną wartość dźwięku na scenie:

Wartość głośności leży w przedziale [0,100], a więc ustawiając na 50 ustawiliśmy na połowę głośności dźwięku.

Oczywiście wszystkie wartości funkcji można pobrać za pomocą przedrostka get.

 

Źródła dźwięku


Każde źródło dźwięku zdefiniowane w SFML posiada te same właściwości dla przestrzenności dźwięków.

Główną z nich jest pozycja źródła dźwięków:

Jest to standardowa pozycja i jeżeli trzeba można ustawić ją aby była słyszalna względem słuchacza.

Może to być użyteczne dla dźwięków wydawanych przez np samego gracza, który zawsze będzie słyszał dźwięki wydawane przez siebie (np wystrzał z pistoletu etc).

Możesz także ustawić słyszalność dźwięków dopiero z pewnej odległości.

Minimalna odległość to odległość, na jakiej będzie słychać dźwięk przy maksymalnej głośności. Na przykład głośniejsze dźwięki jak eksplozje, powinny mieć większą minimalną odległość tak aby dawały wrażenie że są słyszalne z daleka. Minimalna odległość nie powinna przyjmować wartości 0 (jej źródło jest wewnątrz głowy bohatera).

Attenuation to faktor osłabienia dźwięku. Im jest większy tym  słabiej będzie słyszalny z daleka. Aby go nie używać możesz mu ustawić wartość 0. A jeżeli mu ustawisz 100 to dźwięki będą słyszalne jedynie z bardzo bliskiej odległości.

Oryginalny artykuł