Wwise SDK 2019.1.11
|
External Source는 Wwise에서 Sound 오브젝트에 넣을 수 있는 특별한 타입의 음원입니다. 이는, 실제 사운드 데이터가 런타임에 제공될 것을 의미합니다. External Source 통합은, 방대한 양의 대사 라인을 관리할 때 매우 유용합니다. 개별적으로 필요한 Sound와 Event를 뱅크에 포함시켜 적절히 분리하고 관리해줘야 하는 대량의 대사를 효과적으로 관리합니다. 또한, AI에 의해 작동되는 음성 발생기(speech generator)같이 다른 시스템이 이미 관리하고 있는 대사에도 매우 유용하게 쓰입니다.
외부 음원(External Source)은 Wwise 안에서 다른 음원 플러그인과 동일하게 Add Source 버튼을 이용해 생성할 수 있으며, 필요한 경우 복잡한 구조체의 일부로 사용할 수도 있습니다. 게임 측면에서는, 다른 사운드와 동일하게 AK::SoundEngine::PostEvent 와 AK::SoundEngine::DynamicSequence::Playlist::Enqueue 를 이용해 외부 음원으로 이벤트를 재생할 수 있습니다. Event가 게시될 때, 해당 외부 음원을 대신해 재생할 WAV 파일이 필요합니다. 어느 파일을 재생할 지는 전적으로 프로그래머의 결정에 달렸습니다. 즉, 음원 파일 관리가 Wwise 사운드 엔진 밖에서 이뤄진다는 뜻이기도 합니다. 손이 좀 더 가지만, 그만큼 더 자유로운 유연성을 누릴 수 있기도 합니다.
사운드 엔진이 사용하는 wave 데이터가 고유의 포맷으로 돼 있는 경우, 입력 파일을 변환해줘야 런타임에 사운드 엔진으로 전달할 수 있습니다. 이 작업에는 Wwise의 External Sources File List를 이용합니다. 이는 아주 간단한 XML 파일로서, 전환해야 하는 모든 파일을 포함하고 있을 뿐만 아니라 원하는 변환 설정도 함께 있습니다. WSOURCES 파일을 지정하려면, External Sources 탭의 Project Settings로 이동하세요. 이 파일의 예제는 아래와 같습니다.
Root 속성은 Source 입력값의 루트 경로를 지정합니다. 만약 아무 내용도 입력하지 않으면 프로젝트 디렉터리를 루트로 간주합니다. Root 경로는 절대 경로여도 되고 프로젝트 디렉터리에 대한 상대 경로여도 됩니다.
Source 요소는 변환할 파일 하나를 지정합니다.
외부 음원 변환은 뱅크가 생성될 때 다른 모든 파일 변환과 함께 자동으로 실행됩니다. 이미 변환된 파일은 불필요하게 다시 변환되지 않는다는 점에 주의하세요.
경고: 재변환을 방지하기 위해 Wwise는 출력 폴더의 Wwise.dat 파일에 일부 데이터를 저장합니다. 게임에는 이 파일이 필요 없으므로 최종 파일에는 포함시키지 않는 것이 좋습니다. 이 파일이 삭제되면 모든 wave 파일이 재변환됩니다. |
입력 디렉터리의 디렉터리 구조체는 루트 경로에 상대적인 출력 디렉터리에 복제됩니다. 위 예제에서 출력 디렉터리는 'ExternalSources' 폴더와 'Lower Tests\Originals\SFX' 폴더를 포함하게 됩니다. '..'가 포함된 경로는 해당 경로를 빠져나와 맨 처음 실제 폴더에서 시작합니다.
명령줄 도구(command-line tool)를 이용해 프로젝트의 외부 음원만 변환할 수도 있습니다. 예컨대, 이를 이용하면 Xbox One에 대해 뱅크를 생성하지 않고도 외부 음원을 변환할 수 있습니다.
명령줄 도구(WwiseCLI)에 대한 더 자세한 정보는 명령줄 사용하기 를 참고하세요.
사운드 엔진에 오디오 데이터를 보내려면 AkExternalSourceInfo 구조체에 파일 이름이나 데이터 포인터를 지정하면 됩니다. 이렇게 하면 Wwise 프로젝트에서 Sound 오브젝트에 대한 Streaming 체크 상자를 완전히 오버라이드하게 됩니다. 데이터 포인터를 사용할 때는, 메모리 관리를 철저히 해 전체 재생 시간 동안 데이터가 메모리에 머물게끔 하는 것이 중요합니다.
파일 이름을 지정하면, 일반 스트리밍 파일과 똑같은 방식으로 파일이 디스크로부터 스트리밍됩니다. 디스크에서 해당 파일의 위치는, 하위-레벨 I/O 시스템에 File Location Resolver의 구현으로 해결돼야 합니다. Low-Level I/O 하위시스템에 대한 더 많은 정보는 Low-Level I/O 을(를) 참고하세요.
기본 File Location Resolver 서비스는 CAkFileLocationBase 에 구현돼있으며, SDK의 예제를 통해 제공되고 있습니다 ( 기본 Low-Level I/O 구현 을(를) 참고하세요). 이 구현은 하위 폴더를 지원하지 않으며, 각 외부 음원 스트리밍 파일이 '기본' 스트리밍 파일과 동일한 위치에 있다고 간주합니다.
Wwise Stream Manager는 AK::StreamMgr::IAkFileLocationResolver::Open()로 플래그를 보내 올바른 파일 위치를 찾을 수 있도록 돕습니다 (AkFileSystemFlags). 이 단계에서 'company ID'(AkFileSystemFlags::uCompanyID)를 이용해 기본 스트리밍 파일과 외부 음원을 구분할 수 있습니다. Wwise가 SoundBank와 기본 스트리밍 파일에 대해서는 AKCOMPANYID_AUDIOKINETIC 를 전달하고, 외부 음원 스트리밍에 대해서는 AKCOMPANYID_AUDIOKINETIC_EXTERNAL 를 전달하게 됩니다. 그러면 이 값을 이용해 디스크의 다른 위치에서 외부 음원을 검색할 수 있습니다.
참고: AkFileSystemFlags::bIsLanguageSpecific 은, 외부 음원이 'Voice' 사운드 구조체에 포함돼있다 하더라도 외부 음원에 항상 false로 설정돼있습니다. 사실 Voice 대신, 언어 독립적인 SFX 내에서 외부 음원을 사용하는 것이 더 낫습니다. 그리고 현지화는 AkExternalSourceInfo 파일 이름이나 ID를 지정하는 초기 단계부터 신경 써서 관리하는 것이 좋습니다. |
이 프로젝트는 다음 내용을 포함하고 있습니다.
참고: 외부 파일의 확장자명은 반드시 '.wem'이어야 합니다. External Sources File List 파일에서 대상 파일의 이름을 변경할 수는 있지만 확장자명은 변경할 수 없습니다. 파일 변환이 끝나면 파일 확장자명은 항상 '.wem'이 됩니다. 변환된 파일을 File Package로 패키징할 경우, 코드에서 이 파일을 '.wem' 확장자로 참조해야 합니다. 그러면 File Packager가 확장자를 포함한 전체 파일 이름을 해시해 식별 ID를 생성합니다. |
하나의 이벤트에 여러 wave 파일을 교체하는 것이 가능합니다. 예를 들어 Sequence Container에 세 개의 외부 음원을 설정할 수 있습니다. 한 이벤트가 둘 이상의 외부 음원의 재생을 트리거하는 경우, 프로젝트 안에서 교유한 이름을 붙여줘야 (즉, 고유한 쿠키를 갖도록) AkExternalSourceInfo 구조체에 내용을 입력할 때 이 둘을 분리할 수 있습니다.
이 프로젝트는 다음 내용을 포함하고 있습니다.
프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.
Wwise를 시작해 보세요