개발 엔진에서 오디오 컴포넌트는 게임 또는 애플리케이션 내에서 오디오 소스를 추가하고 제어할 수 있는 기본 제공 컴포넌트입니다. 이를 통해 사운드, 음악 및 기타 오디오 효과를 재생하여 사용자의 전반적인 오디오 경험을 향상시킬 수 있습니다.
오디오 컴포넌트는 세 가지 주요 요소로 구성됩니다:
오디오 소스:
이 컴포넌트는 게임에서 재생할 오디오 클립 또는 사운드 파일을 나타냅니다. 짧은 사운드 효과, 배경 음악 또는 기타 모든 유형의 오디오가 될 수 있습니다. 오디오 소스 컴포넌트에는 오디오 클립 자체, 볼륨, 피치, 공간 블렌드(3D 사운드의 경우) 및 기타 다양한 설정과 같은 파라미터가 포함됩니다.
class AudioSource : public Component
{
public:
AudioSource();
~AudioSource();
void Initialize() override;
void Update() override;
void LateUpdate() override;
void Render(HDC hdc) override;
void Play();
void Stop();
void SetLoop(bool loop);
void SetClip(AudioClip* clip) { mAudioClip = clip; }
AudioClip* GetClip() { return mAudioClip; }
private:
AudioClip* mAudioClip;
};
C++
복사
오디오 리스너:
이 컴포넌트는 게임 내에서 플레이어 또는 리스너의 귀를 나타냅니다. 오디오를 캡처하고 플레이어가 오디오를 인식하는 방식을 결정하는 역할을 합니다. 일반적으로 씬에는 오디오 리스너 컴포넌트가 하나만 존재하며, 메인 카메라 또는 플레이어의 시점을 나타내는 특정 오브젝트에 부착됩니다.
class AudioListener : public Component
{
public:
AudioListener();
~AudioListener();
void Initialize() override;
void Update() override;
void LateUpdate() override;
void Render(HDC hdc) override;
};
C++
복사
오디오 클립:
오디오 클립 속성은 오디오 소스가 재생할 사운드 파일 또는 오디오 클립을 지정합니다. 프로젝트의 에셋에서 오디오 클립을 할당하거나 스크립팅을 사용하여 동적으로 생성할 수 있습니다.
3D Audio System 기반이기 때문에 너머 먼거리에 Listener와 Source가 있으면 소리가 들리지 않을수도 있습니다.
class AudioClip : public Resource
{
public:
AudioClip();
virtual ~AudioClip();
virtual HRESULT Load(const std::wstring& path) override;
void Play();
void Stop();
void Set3DAttributes(const Vector2 pos);
void SetLoop(bool loop) { mbLoop = loop; }
private:
FMOD::Sound* mSound;
FMOD::Channel* mChannel;
float mMinDistance;
float mMaxDistance;
bool mbLoop;
};
C++
복사
FMOD 라이브러리를 관리하는 클래스
#pragma once
#include "CommonInclude.h"
#include "..\\External\\Include\\Fmod\fmod_studio.hpp"
#include "..\\External\\Include\\Fmod\\fmod.hpp"
#include "..\\External\\Include\\Fmod\\fmod_common.h"
#include "..\\External\\Include\\Fmod\\fmod_codec.h"
#ifdef _DEBUG
#pragma comment(lib, "..\\External\\Library\\Fmod\\Debug\\fmodL_vc.lib")
#pragma comment(lib, "..\\External\\Library\\Fmod\\Debug\\fmodstudioL_vc.lib")
#else
#pragma comment(lib, "..\\External\\Library\\Fmod\\Debug\\fmod_vc.lib")
#pragma comment(lib, "..\\External\\Library\\Fmod\\Release\\fmodstudio_vc.lib")
#endif
namespace ya
{
using namespace math;
class Fmod
{
public:
static void Initialize();
static bool CreateSound(const std::string& path, FMOD::Sound** sound);
static void SoundPlay(FMOD::Sound* sound, FMOD::Channel** channel);
static void Set3DListenerAttributes(const Vector2* pos);
static void Release();
private:
static FMOD::Studio::System* mSystem;
static FMOD::System* mCoreSystem;
};
}
C++
복사