버전

menu_open
Wwise Unreal Integration Documentation
Wwise Simple External Source Manager 사용하기

External Source로 작업할 때 External Source와 해당 미디어는 기본적으로 분리되어 있음을 꼭 기억해 주세요. 디자이너(또는 개발자)는 기본적으로 ShortID인 External Source Cookie와 재생할 미디어 간의 매핑을 명시적으로 설정해야 합니다. External Source 미디어는 SoundBank와 스트리밍 미디어와 함께 생성될 수 있지만 디자이너가 미디어 파일과 해당 메타데이터도 추적해야 합니다.

Simple External Source Manager는 External Source 미디어를 추적하며 External Source에 매핑할 수 있는 기능을 제공합니다. 이는 게임에서 사용할 External Source 미디어를 설명하는 Data Table(.csv 파일)과 미디어를 External Source에 할당하는 API 및 Blueprint 함수를 통해 이루어집니다.

참고:이 SubModule의 사용 예시는 WwiseDemoGame에서 볼 수 있습니다.

Simple External Source Manager 활성화하기

기본적으로 Simple External Source Manager 모듈은 비활성화되어 있습니다. 이를 활성화하려면 Unreal 프로젝트의 DefaultEngine.ini 파일에 다음 줄을 추가하세요:

이 코드는 Wwise Simple External Source Manager 하위 모듈을 사용해서 External Source 로드를 처리하는 모듈로 WwiseFileHandlerModule을 오버라이드합니다.

설정

Wwise Simple External Source Manager Settings는 두 개의 Data Table과 하나의 Directory를 통해 설정할 수 있습니다:

  • Media Info Table에는 미디어 파일을 로드하는 데 필요한 메타데이터가 포함되어 있습니다.
  • External Source Default Media(선택 사항)는 External Source와 Media Info Table의 미디어 간의 초기 매핑을 정의합니다. 이 문서의 뒷부분에서 설명하는 API 및 Blueprint 함수를 사용해서 이 매핑을 업데이트하거나 추가할 수 있습니다.
  • External Source Staging Directory는 패키지 게임의 'Game' 폴더에 상대적인 External Source 미디어 파일을 복사할 위치를 지정합니다.

Media Info Table

미디어 정보 테이블의 항목에는 다음과 같은 속성이 있습니다.

  • Name: ExternalSourceMediaInfoId와 일치해야 합니다. 테이블에서 조회하는 데 사용됩니다.
  • ExternalSourceMediaInfoId: 관리자에서 미디어를 추적하는 데 사용되는 고유 ID입니다.
  • MediaName: 디스크에서 파일을 찾는 데 사용되는 파일 이름(확장명 포함)입니다. 또한 이름으로 미디어를 설정할 때 관리자가 미디어 ID를 조회하기 위해 사용됩니다.
  • CodecID: 미디어 데이터를 디코딩하는 데 사용하는 코덱의 ID입니다. AkGameplayTypes.hAkCodecId 열거형(enum)을 참조해 주세요.
  • bIsStreamed: 미디어를 스트리밍으로 로드할지 메모리로 로드할지 결정합니다.
  • bUseDeviceMemory: 장치별 메모리 사용 여부를 결정합니다. 메모리를 사용하는 미디어에만 적용됩니다.
  • MemoryAlignment: 사용할 메모리 정렬. 메모리를 사용하는 미디어에만 적용됩니다.
  • PrefetchSize: 프리페치할 데이터의 양(바이트). 스트리밍 미디어에만 적용됩니다.

External Source 기본 미디어

기본 미디어 테이블의 항목에는 다음과 같은 속성이 있습니다.

  • Name: ExternalSourceCookie와 일치해야 합니다. 테이블에서 조회하는 데 사용됩니다.
  • ExternalSourceCookie: Wwise Authoring 또는 SoundBank 메타데이터에서 찾을 수 있는 External Source의 고유 ID입니다.
  • ExternalSourceName: 로깅(logging)하는 데에 사용됩니다.
  • MediaInfoId: Media Info TableExternalSourceMediaInfoId와 일치해야 합니다.
  • MediaName: 로깅(logging)하는 데에 사용됩니다.

Simple External Source Manager의 작동 방식

Simple External Source Manager가 인스턴스화되면 Media Info Table 을 읽어 미디어 메타데이터 목록을 채웁니다. 그리고 미디어 ID의 미디어 이름 맵이 External Source Manager Blueprint 함수 와 함께 사용되도록 채워집니다.

다음으로 External Source 기본 미디어 를 읽고 External Source Cookie/미디어 ID 쌍을 맵에 추가합니다. 이러한 선택적인 Data Table은 게임에서 사용할 External Source에 대한 '기본' 미디어를 설정합니다. 이 시스템은 SetExternalSourceMedia 메소드에 대한 Blueprint 및 함수 호출의 수를 줄입니다. 기본 미디어가 이미 정의된 경우 미디어를 동적으로 변경하는 External Source에만 이 메소드를 사용하면 됩니다.

External Source Manager가 External Source를 로드하면 (보통 로드 중인 AkAudioEvent에 의해 트리거됨) External Source를 참조하는 에셋의 수를 추적하는 상태 구조체가 생성되고 해당 맵이 확인됩니다. 맵에 미디어 페어링이 있을 경우 미디어에 대한 상태 구조체가 생성되거나 이러한 구조체가 이미 있는 경우 업데이트됩니다. Media Info Table 에서 읽은 정보에 따라 미디어는 디스크에서 메모리로 로드되고, 스트리밍되는 경우에는 생성된 상태가 등록되어 SoundEngine에서 들어오는 스트리밍 요청을 처리합니다.

External Source Cookie/미디어 ID 쌍이 게임 플레이 중에 설정되고(예: External Source Manager Blueprint 함수 에 의해서) External Source가 이미 로드된 경우 미디어가 즉시 로드됩니다. Exteral Source가 이미 다른 미디어에 매핑된 경우 해당 미디어의 참조 횟수가 감소합니다. 참조 횟수가 0이면 재생이 중지되고 언로드됩니다.

통합의 Blueprint 함수에서 발생하는 PostEvent 호출을 포함해서 AkAudioDevice를 통과하는 모든 PostEvent 호출은 External Source Manager의 PrepareExternalSourceInfos 메소드를 호출합니다. 이러한 메소드는 전달된 External Source 쿠키에 게시할 미디어를 선택합니다. 해당 작업이 성공하거나 실패한 후 BindPlayingIdToExternalSources 메소드가 호출되어 선택한 모든 미디어를 게시된 이벤트의 Playing ID에 바인딩합니다. 마찬가지로 Event 재생이 완료되면 OnEndOfEvent 메소드가 호출되고 미디어가 해당 Playing ID에서 더 이상 사용되지 않음을 External Source Manager에게 알립니다.

마지막으로 Cook 메소드는 External Source 미디어 패키징을 지원합니다. External Source를 사용하는 Event가 패키징되면 각 External Source에 대해 Cook 메소드가 호출됩니다. 이러한 메소드가 호출되면 Simple External Source Manager는 패키징을 위해 Media Info Table 에 모든 미디어 파일을 준비합니다. 해당 작업은 한 번만 수행하면 되기 때문에 플래그가 설정되고 그 다음 Cook로의 호출은 아무 작업도 수행하지 않습니다.

참고:WwiseSoundEngine API를 통해 직접 External Source로 이벤트를 게시하는 경우 적절한 시간에 External Source Manager의 PrepareExternalSourceInfos, BindPlayingIdToExternalSourcesOnEndOfEvent를 구현해야 합니다. 그렇지 않으면 External Source가 재생되는 동안 사용하는 미디어를 전환하게 되면 이전 미디어가 조기에 언로드되어 SoundEngine에 크래시가 일어날 수 있습니다. 또한 더 낮은 수준에서 I/O Hook를 재정의하고 파일 관리를 직접 처리할 수도 있습니다.

Data Table 업데이트하기

디스크의 Data Table이 수정되고 Unreal Editor가 열리면 해당 콘텐츠가 다시 파싱됩니다. 그런 다음 로드된 모든 Wwise Events Asset이 언로드된 다음 다시 로드됩니다. 이러한 억지 기법은 External Source Manager의 상태가 적절하게 업데이트되도록 하는 가장 간단한 방법입니다.

External Source Manager Blueprint 함수

External Source와 미디어 간의 매핑을 업데이트하기 위해 모듈은 외부 음원 미디어를 설정하는 Blueprint 함수를 제공합니다.

선호에 따라 이름이나 ID를 사용하는 세 가지 Blueprint 함수가 제공됩니다.

  • SetExternalSourceMediaById: External Source 이름을 사용하여 External Source를 지정하고 MediaID를 사용하여 미디어를 지정합니다.
  • SetExternalSourceMediaByName: External Source 이름을 사용하여 External Source를 지정하고 Media Info Table 에서 MediaName을 사용하여 미디어를 지정합니다.
  • SetExternalSourceMediaWithIds: External Source Cookie를 사용하여 External Source를 지정하고 MediaID를 사용하여 미디어를 지정합니다.

문자열로 External Source 미디어를 설정할 경우 Cookie는 이름 문자열의 해시(hash)에 의해 결정됩니다 (Wwise Authoring의 방법과 같음). MediaIDMedia Info Table이 파싱될 때 구성되는 맵에서 미디어 이름을 조회하여 가져옵니다.

참고:Blueprint는 부호가 있는 짧은 정수만 사용할 수 있습니다. 이러한 제한을 피하려면 FAkUniqueID 변수를 사용하여 External Source 쿠키 값을 설정하세요.

External Source Manager API

개발자는 코드를 통해 두 가지 방법으로 External Source를 설정할 수 있습니다. 이전 섹션에서 설명한 Blueprint 함수를 호출하거나, External Source Manager 인스턴스를 가져와서 해당 메소드를 직접 호출할 수 있습니다. Wwise Simple External Source Manager의 대부분의 메소드는 가상이기 때문에 개발자는 이러한 관리자를 새로운 모듈로 확장할 수 있습니다. 그리고 자체 데이터 구조체와 논리를 사용하여 미디어를 추적하고 External Source와 페어링할 수 있습니다.

Simple External Source Manager의 한계

Simple External Source Manager 디자인의 주요 한계점은 여러 플랫폼 게임에 대해 Media Info Table 이 유연하지 않다는 것입니다. 플랫폼마다 다른 코덱을 사용해서 미디어를 디코딩하지만 Media Info Table의 구조체는 이를 지원하지 않습니다. 관리자 확장으로 가능한 한 해결책은 플랫폼별 Media Info Table을 만들고 빌드 대상에 따라 알맞게 패키징하는 것입니다.

When streaming, External Sources have more limitations than internally packaged media. Zero Latency is not possible with External Sources, and the prefetched data is only provided to the SoundEngine when it is requested for playback. There is a playback delay between the initial PostEvent and the actual sample processing, as would occur with any media that do not have Zero Latency.


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

지원이 필요하신가요?

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

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

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

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

Wwise를 시작해 보세요