버전
menu_open
Wwise SDK 2023.1.3
사운드 엔진 모듈 초기화하기

Wwise 사운드 엔진을 통합하는 첫 번째 단계는 다양한 모듈을 적절하게 초기화하는데 있습니다. 이러한 모듈은 게임을 시작할 때 구성하게 됩니다.

예제 프로젝트에서 다음 함수는 사운드 엔진의 초기화와 관련된 모든 작업을 수행하도록 정의되어 있습니다:

bool InitSoundEngine()
{
... 여기서 초기화가 완료하게 됩니다...
return true;
}

이 함수는 메인 함수의 시작 부분에서 호출됩니다. 초기화가 필요한 다양한 요소들을 살펴보세요.

메모리 매니저의 초기화

맨 먼저 반드시 초기화 해줘야 하는 것에 Memory Manager (메모리 매니저)가 있습니다. 다음 코드는 기본 Memory Manager를 생성합니다.

#include <AK/SoundEngine/Common/AkMemoryMgr.h> // Memory Manager 인터페이스
#include <AK/SoundEngine/Common/AkModule.h> // 기본 설정 메모리 매니저
(...)
bool InitSoundEngine()
{
AkMemSettings memSettings;
if ( AK::MemoryMgr::Init( &memSettings ) != AK_Success )
{
assert( ! "Could not create the memory manager." );
return false;
}
(...)
}
참고: 위에서 나오는 코드를 필요에 따라 반드시 적용해야 하는 경우, 메모리 매니저를 오버라이드할 수 있습니다. 더 많은 정보는 메모리 매니저 오버라이딩 을 참고하세요.

메모리 매니저와 관련된 더 많은 정보는 메모리 매니저 를 참고합니다.

스트리밍 매니저의 초기화

메모리 매니저가 초기화되면 스트리밍 매니저를 초기화할 수 있습니다.

다음 코드는 기본 스트리밍 매니저 (Streaming Manager)를 초기화합니다. 이 코드는 AK::StreamMgr::IAkFileLocationResolver 인스턴스가 필요하며, 스트리밍 장치를 생성합니다. This requires an instance of AK::StreamMgr::IAkLowLevelIOHook. This interface is defined in AkStreamMgrModule.h, which contains all definitions that are specific to the default Stream Manager implementation provided with the SDK.

디스크 I/O와 관련해서 추천하는 사운드 엔진의 통합 방법은 기본 스트림 매니저의 구현을 사용하고 AkStreamMgrModule.h에 정의된 인터페이스를 구현하는 것입니다. 인터페이스는 하위-레벨 I/O 모듈로 구성됩니다. 더 많은 정보는 스트리밍 / 스트림 매니저 를 참고하세요.

This example uses the sample CAkFilePackageLowLevelIODeferred as is. This class implements both AK::StreamMgr::IAkFileLocationResolver and AK::StreamMgr::IAkLowLevelIOHook interfaces, and is able to load file packages generated with the File Packager utility (refer to 파일 패키지 Low-Level I/O 구현 and File Packager 유틸리티 for more information about the File Packager and how it works in the Low-Level I/O).

하위-레벨 I/O에 대한 더 많은 정보는 Low-Level I/O 를 참고하세요.

#include <AK/SoundEngine/Common/IAkStreamMgr.h> // 스트리밍 매니저
#include <AK/Tools/Common/AkPlatformFuncs.h> // 스레드 정의
#include <AkFilePackageLowLevelIODeferred.h> // 예제 하위-레벨 I/O 구현
(...)
// SDK의 예제 코드 중 하나인 기본 하위-레벨 I/O 구현을
// 파일 패키지 확장과 함께 사용합니다.
// of the SDK's sample code, with the file package extension
CAkFilePackageLowLevelIODeferred g_lowLevelIO;
(...)
bool InitSoundEngine()
{
(...)
//
// 기본 스트리밍 매니저의 인스턴스를 생성하고 초기화합니다. Note
// 기본 스트리밍 매니저를 오버라이드할 수 있다는 점을 명심하세요.
//
AkStreamMgrSettings stmSettings;
// 여기서 스트림 매니저 설정을 변경합니다.
if ( !AK::StreamMgr::Create( stmSettings ) )
{
assert( ! "Could not create the Streaming Manager" );
return false;
}
//
// Create a streaming device.
// 기본 하위-레벨 I/O 모듈을 오버라이드할 수 있다는 점을 명심하세요.
//
AkDeviceSettings deviceSettings;
// 여기서 스트리밍 장치 설정을 변경합니다.
// CAkFilePackageLowLevelIODeferred::Init() creates a streaming device
// in the Stream Manager, and registers itself as the File Location Resolver.
if ( g_lowLevelIO.Init( deviceSettings ) != AK_Success )
{
assert( ! "Could not create the streaming device and Low-Level I/O system" );
return false;
}
(...)
}

기본 스트림 매니저와 스트리밍 장치의 초기화 설정에 관한 더 많은 정보는 Audiokinetic Stream Manager 초기화 설정 를 참고하세요.

경고: 몇몇 초기화 설정은 AkThreadProperties와 같이 플랫폼에 특화된 멤버 구조체를 사용합니다.

기본 하위-레벨 IO의 구현이나 완전한 스트리밍 매니저를 오버라이드하길 결정했다면, 이 코드를 알맞게 적용해야 합니다. 더 많은 정보는 스트리밍 / 스트림 매니저 를 참고하세요.

사운드 엔진의 초기화

이제 기본 모듈이 초기화되어 사운드 엔진 자체를 초기화할 준비가 됐습니다.

#include <AK/SoundEngine/Common/AkSoundEngine.h> // 사운드 엔진
(...)
bool InitSoundEngine()
{
(...)
//
// 기본 초기화 매개 변수를 사용해
// 사운드 엔진을 생성합니다.
//
AkInitSettings initSettings;
AkPlatformInitSettings platformInitSettings;
if ( AK::SoundEngine::Init( &initSettings, &platformInitSettings ) != AK_Success )
{
assert( ! "Could not initialize the Sound Engine." );
return false;
}
(...)
}

사운드 엔진을 초기화하는 방법에 관한 더 많은 정보는 고급 사운드 엔진의 통합 을 참고하세요.

음악 엔진의 초기화

자신의 프로젝트에서 상호 작용하는 음악 기능을 사용하려면, 사운드 엔진 다음에 뮤직 엔진을 초기화해야 합니다.

#include <AK/MusicEngine/Common/AkMusicEngine.h> // Music Engine
(...)
bool InitSoundEngine()
{
(...)
//
// 기본 초기화 매개 변수를 사용해
// 뮤직 엔진을 초기화합니다.
//
AkMusicSettings musicInit;
if ( AK::MusicEngine::Init( &musicInit ) != AK_Success )
{
assert( ! "Could not initialize the Music Engine." );
return false;
}
(...)
}

Spatial Audio 초기화하기

자신의 프로젝트가 Wwise Spatial Audio를 사용할 경우, 사운드 엔진을 초기화한 다음 Spatial Audio 라이브러리 또한 초기화해줘야 합니다. Spatial Audio 사용법과 관련한 종합적인 정보를 보려면 API Setup 를 참고하세요. Spatial Audio의 환경 설정과 관련한 다양한 매개 변수를 보려면 AkSpatialAudioInitSettings 를 참고하세요.

참고: Spatial Audio를 사용하려면 Spatial Audio 모듈에 연결해야합니다.
#include <AK/SpatialAudio/Common/AkSpatialAudio.h> // Spatial Audio
(...)
bool InitSoundEngine()
{
(...)
//
// 기본 초기화 매개 변수를 사용해
// Spatial Audio를 초기화합니다.
//
AkSpatialAudioInitSettings settings; // 생성자가 AkSpatialAudioInitSettings 를 권장되는 기본 설정으로 채워 넣습니다.
if ( AK::SpatialAudio::Init( &settings ) != AK_Success )
{
assert( ! "Could not initialize the Spatial Audio." );
return false;
}
(...)
}

커뮤니케이션 초기화

게임과 연결되도록 Wwise 편집 애플리케이션을 사용해 게임 내의 믹싱 및 프로파일링, 문제해결을 수행하기 위한 다음 단계로 커뮤니케이션을 초기화합니다. 게임 내에서 믹싱과 프로파일링, 문제해결은 사운드 디자이너가 더욱 효과적으로 게임의 오디오 작업을 하기 위한 상당히 강력한 방법입니다. 이러한 이유로 커뮤니케이션 작업을 진행하길 강력하게 추천합니다.

참고: 커뮤니케이션을 사용하기 위해서는 CommunicationCentral 모듈로 연결해야 합니다.
참고: 커뮤니케이션은 사운드 엔진만의 Debug와 Profile 설정으로 사용 가능합니다. 커뮤니케이션은 게임의 배포 버전에서는 필요가 없기 때문에, 사운드 엔진의 Release 빌드에는 포함되지 않습니다. 다음 코드는 릴리즈 빌드에서 커뮤니케이션과 관련된 코드를 무시하기 위해 AK_OPTIMIZED 심볼을 사용합니다.
// Wwise와 게임 간에 커뮤니케이션을 위해서 추가합니다. - 릴리즈 버전에서는 필요가 없습니다.
#ifndef AK_OPTIMIZED
#endif // AK_OPTIMIZED
(...)
bool InitSoundEngine()
{
(...)
#ifndef AK_OPTIMIZED
//
// 커뮤니케이션을 초기화합니다.(릴리즈 빌드에서는 무시!)
//
AkCommSettings commSettings;
if ( AK::Comm::Init( commSettings ) != AK_Success )
{
assert( ! "Could not initialize communication." );
return false;
}
#endif // AK_OPTIMIZED
(...)
}

지금까지 사운드 엔진의 모듈을 전부 초기화했습니다. 이제 플러그인을 등록해야 합니다. (플러그인 예제 참조) 게임 반복문에서 오디오를 처리하기 위한 호출과 관련된 세부 사항에 관해서는 오디오 처리 과정을 수행하기 위한 재귀 호출의 생성 를 참고하세요.

콘솔에 특화된 커뮤니케이션 라이브러리

몇몇 콘솔 커뮤니케이션 라이브러리는 적절한 초기화/종료 호출이 균형을 이루지 않습니다. 그래서 AK::Comm::Term 호출로 콘솔에서 근본적인 하위-레벨 커뮤니케이션 라이브러리를 종료합니다. 이는 효과적으로 게임에 모든 TCP/IP 커뮤니케이션을 닫습니다. 게임이 종료된 후에도 커뮤니케이션 라이브러리가 활성화되도록 유지하기 위해, AkCommSettings은 시스템 라이브러리를 초기화할지 안 할지 결정하는 하나의 매개 변수를 갖습니다. 커뮤니케이션 라이브러리 자체를 초기화하도록 선택하려면 아래에 나오는 Wwise 사운드 엔진 코드를 확인하세요. 게임에서 이와 유사하게 동작해야 합니다.

Windows 소켓 초기화:

WSAData wsaData = { 0 };
::WSAStartup( MAKEWORD( 2, 2 ), &wsaData )

종료:

::WSACleanup();

커뮤니케이션 포트

AkCommSettings 구조체의 AkCommSettings::ports 멤버는 Wwise 저작 애플리케이션과 사운드 엔진 간의 통신을 위해 사용되는 네트워크 포트를 나타냅니다. Wwise 커뮤니케이션이 활성화되면 게임에서 모든 포트가 열려있게 됩니다.

하나의 고정 포트: Discovery Broadcast

포트 중 하나인 AkCommSettings::Ports::uDiscoveryBroadcast는 동적 포트(0으로 설정이 불가능)가 될 수 없습니다. 저작 애플리케이션은 네트워크상에서 게임을 찾을 수 있도록 이를 인지하고 있어야 합니다. 게다가 여기서 지정한 값은 저작 애플리케이션 내 Project Settings의 Network 탭에서 지정한 값과 같아야 합니다.

작은 정보: 개발팀에서 여러 개의 게임에 Wwise로 작업을 진행한다면, 각각의 게임에 대해 서로 다른 Discovery Broadcast 포트를 사용하고 싶을 것입니다. Wwise 저작 애플리케이션에서 Remote Connections 창을 열면, 현재 열린 Wwise 프로젝트에 응답하도록 해당 게임에 대해서만 목록이 나타납니다. 해당 포트를 변경할 때 저작 애플리케이션 내의 Project Setting 게임에서 AK::Comm::Init()로 전달되는 AkCommSettings 둘 다 변경해줘야 합니다.

One Dynamic Port

The other port in the structure can be dynamic (or "ephemeral"). 이는 고정 포트를 사용하는 대신에 운영체제에 의해 자동으로 선택되게 합니다.

This ports is dynamic by default. It is recommended to keep it dynamic in order to minimize chances of conflicts with other applications.

If it conflicts with ports used by other components of your game, change it in the AkCommSettings structure before calling AK::Comm::Init().

참고: In a multi-platform game, it is valid to use different ports on different platforms for AkCommSettings::Ports::uCommand.

작은 정보: 동적/임시 포트에 대한 더 많은 정보는 다음 글을 참고하세요.

또 다른 포트 (저작 애플리케이션 전용)

Wwise 커뮤니케이션과 관련 있는 한 가지 포트가 더 있습니다. 그러나 해당 포트는 저작 애플리케이션 전용으로 열려 있어서, AkCommSettings::Ports 구조체에 들어있지 않습니다.

이 포트는 네트워크상에서 실행 중인 게임을 검출하도록 전송된 Discovery Broadcast 메시지에 대해서 응답을 받도록 저작 애플리케이션에 의해 사용됩니다. 기본적으로(0으로 설정) 동적 포트이지만, 저작 애플리케이션 내의 Project 설정에서 변경할 수 있습니다.

AKSOUNDENGINE_API AKRESULT Init(AkInitSettings *in_pSettings, AkPlatformInitSettings *in_pPlatformSettings)
AKSOUNDENGINE_API AKRESULT Init(const AkSpatialAudioInitSettings &in_initSettings)
Initialize the SpatialAudio API.
AKSOUNDENGINE_API AKRESULT Init(AkMemSettings *in_pSettings)
AKSOUNDENGINE_API void GetDefaultSettings(AkStreamMgrSettings &out_settings)
AKSOUNDENGINE_API AKRESULT Init(const AkCommSettings &in_settings)
AKSOUNDENGINE_API void GetDefaultInitSettings(AkMusicSettings &out_settings)
@ AK_Success
The operation was successful.
Definition: AkTypes.h:215
AKSOUNDENGINE_API void GetDefaultInitSettings(AkInitSettings &out_settings)
AKSOUNDENGINE_API void GetDefaultSettings(AkMemSettings &out_pMemSettings)
Obtain the default initialization settings for the default implementation of the Memory Manager.
AKSOUNDENGINE_API void GetDefaultInitSettings(AkCommSettings &out_settings)
Initialization settings of the spatial audio module.
AKSOUNDENGINE_API void GetDefaultPlatformInitSettings(AkPlatformInitSettings &out_platformSettings)
AKSOUNDENGINE_API IAkStreamMgr * Create(const AkStreamMgrSettings &in_settings)
AKSOUNDENGINE_API void GetDefaultDeviceSettings(AkDeviceSettings &out_settings)
AKSOUNDENGINE_API AKRESULT Init(AkMusicSettings *in_pSettings)

이 페이지가 도움이 되었나요?

지원이 필요하신가요?

질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!

지원 페이지를 방문해 주세요

작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.

프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.

Wwise를 시작해 보세요