오디오 이미터 사용 가이드
오디오 이미터(Audio Emitters)는 GameMaker의 오디오 엔진을 더욱 유연하게 만들어주는 도구입니다. 이 기능은 오디오 자산에 실시간 효과를 추가할 수 있게 해주며, 음향을 3D 오디오 공간에서 위치시키고 현실감 있는 움직임 효과를 제공할 수 있습니다. 이 모든 기능은 오디오 환경 내에서 청취자의 위치에 영향을 받으므로, 이러한 기능을 사용하기 위해 청취자의 위치, 속도 및 방향을 변경하는 함수도 함께 사용해야 합니다. (자세한 내용은 오디오 리스너 섹션을 참고하세요.)
오디오 이미터와 리스너 사용 방법
오디오 이미터와 리스너를 조합하면 풍부하고 생동감 있는 환경을 만들 수 있습니다. 이를 설정하는 과정이 다소 복잡하므로, 여기에서는 이미터와 기본 리스너를 사용하여 전체 시스템을 설정하기 위해 필요한 단계에 대해 살펴보겠습니다.
1. 폴오프 모델 설정하기
오디오 이미터에서 작업을 시작할 때 가장 먼저 해야 할 일은 폴오프 모델을 설정하는 것입니다. 이는 audio_falloff_set_model() 함수를 사용하여 수행합니다. 폴오프 모델은 청취자와 이미터 간의 거리와 관련하여 재생되는 소리의 볼륨이 어떻게 변하는지 결정합니다.
- 기본적으로 이 함수를 호출하지 않으면
audio_falloff_none모델이 사용되며, 이는 소리가 거리와 관계없이 일정하게 유지됨을 의미합니다. - 마을 이상의 거리를 넘어서 소리가 들리지 않도록 하려면
scaled로 끝나는 폴오프 모델 중 하나를 설정해야 합니다.
2. 리스너 업데이트하기
기본 오디오 리스너의 위치는 (0, 0, 0)에 있습니다. audio_play_sound 함수로 소리를 재생하면 리스너의 위치에서 소리가 들리게 됩니다. 리스너와 이미터의 상대적 위치가 변경되면 소리가 양쪽 스피커에서 반드시 들리지 않을 수 있습니다.
리스너는 위치만 있는 것이 아니라, audio_listener_orientation를 사용하여 변경할 수 있는 방향도 가집니다. 기본 방향은 상단이 아래를 향하고 있으므로, 다음 코드를 사용하여 리스너의 방향을 설정해야 합니다:
audio_listener_orientation(0, 0, 1, 0, -1, 0);
위 코드는 리스너가 화면을 바라보도록 설정합니다.
방향 플레이어에 맞추기
탑다운 게임을 만들 때는 리스너의 방향이 플레이어의 방향을 따라가게 만드는 것이 흥미로울 수 있습니다:
audio_listener_orientation(0, 0, 1, lengthdir_x(1, direction), lengthdir_y(1, direction), 0);
위 코드에서는 리스너의 방향이 플레이어의 방향을 기반으로 설정됩니다.
3. 소리 재생하기
폴오프 모델을 설정하고 리스너의 위치 및 방향을 올바르게 업데이트한 후, audio_play_sound_at를 사용하여 3D 오디오 공간에서 소리를 재생할 수 있습니다:
sound_instance = audio_play_sound_at(snd_Explosion, x, y, 0, 100, 300, 1, true, 1);
위 코드는 "snd_Explosion" 소리를 (x, y, 0) 위치에서 재생하며, 폴오프 기준 거리 100, 최대 거리 300 및 폴오프 계수를 설정합니다. 소리의 속성을 변경하려면 sound_instance 변수를 통해 접근할 수 있지만, 재생 중인 소리의 위치나 속도를 변경할 수는 없습니다.
4. 이미터 추가하기
오디오 이미터는 audio_emitter_create를 사용하여 추가할 수 있으며, 기본적으로 (0, 0, 0) 위치에 놓입니다:
emitter = audio_emitter_create();
이미터 업데이트하기
이미터의 위치와 속도는 소리가 재생 중인 상태에서도 변경할 수 있습니다. 예:
audio_emitter_position(emitter, x, y, 0);
audio_emitter_velocity(emitter, hspeed, vspeed, 0);
5. 이미터에서 소리 재생하기
이미터에서 소리를 재생하려면 audio_play_sound_on 함수를 사용합니다:
sound_instance = audio_play_sound_on(emitter, snd_Explosion, false, 10);
6. 재생 중인 소리 인스턴스 관리하기
소리를 재생할 때마다 새로운 소리 인스턴스가 생성됩니다. 소리 인스턴스의 속성을 변경하려면 반환 값을 변수에 할당해야 합니다:
sound_instance = audio_play_sound_at(snd_Explosion, x, y, 0, 100, 300, 1, true, 1);
소리 인스턴스를 배열에 저장하여 관리할 수도 있습니다:
var _x = random(room_width);
var _y = random(room_height);
var _new_sound_instance = audio_play_sound_at(snd_Bird, _x, _y, 0, 200, 400, true, 10);
array_push(bird_sounds, _new_sound_instance);
7. 추가 리스너 사용하기
추가 리스너를 사용하려면 먼저 시스템이 다수의 리스너를 지원하는지 확인해야 하며, audio_get_listener_count를 사용하여 확인할 수 있습니다. 여러 리스너가 있다면 audio_get_listener_info를 사용하여 각 리스너의 이름 및 인덱스를 얻을 수 있습니다.
함수 목록
다음은 오디오 이미터와 관련된 함수 목록입니다:
| 함수 이름 | 설명 |
|---|---|
| audio_emitter_create | 이미터 생성 |
| audio_emitter_exists | 이미터 존재 확인 |
| audio_emitter_position | 이미터 위치 설정 |
| audio_emitter_velocity | 이미터 속도 설정 |
| audio_emitter_falloff | 이미터 폴오프 설정 |
| audio_emitter_gain | 이미터 게인 설정 |
| audio_emitter_pitch | 이미터 피치 설정 |
| audio_emitter_set_listener_mask | 리스너 마스크 설정 |
| audio_emitter_free | 이미터 해제 |
| audio_play_sound_on | 이미터에서 소리 재생 |
| audio_emitter_get_gain | 이미터 게인 얻기 |
| audio_emitter_get_pitch | 이미터 피치 얻기 |
| audio_emitter_get_x | 이미터 X 위치 얻기 |
| audio_emitter_get_y | 이미터 Y 위치 얻기 |
| audio_emitter_get_z | 이미터 Z 위치 얻기 |
| audio_emitter_get_vx | 이미터 X 속도 얻기 |
| audio_emitter_get_vy | 이미터 Y 속도 얻기 |
| audio_emitter_get_vz | 이미터 Z 속도 얻기 |
| audio_emitter_get_listener_mask | 이미터 리스너 마스크 얻기 |
| audio_emitter_bus | 이미터 버스 설정 |
결론
오디오 이미터와 리스너는 GameMaker에서 3D 오디오 효과를 쉽게 구현할 수 있는 강력한 도구입니다. 다양한 설정과 함수를 활용하여 맞춤형 오디오 환경을 만들어 보세요!
© Copyright YoYo Games Ltd. 2023 All Rights Reserved