XAudio2를 사용하십시오.
다음 섹션에서는 XBOX One 개발 키트에서 XAudio2를 사용하여 사운드를 로드하고 재생하는 방법을 설명합니다.
동작하는 XAudio2 샘플의 경우 Microsoft Game Development Kit(GDK) 샘플에서 SimplePlaySound 샘플을 다운로드하십시오.
중요한 XAudio2 데이터 형식
XAudio2는 XBOX One에서 사운드 효과를 재생하는 데 도움이 되는 여러 데이터 형식을 제공합니다. .wav 파일을 재생하려면 최소한 다음 데이터 형식이 필요합니다.
-
IXAudio2: 이는 모든 오디오 엔진 상태, 오디오 처리 스레드, 보이스 그래프 등을 관리하는XAudio2오브젝트의 인터페이스입니다. -
IXAudio2SourceVoice: 소스 보이스를 사용하여XAudio2처리 파이프라인에 오디오 데이터를 제출합니다. 들리려면 보이스 데이터를 마스터링 보이스로 보내야 합니다. -
IXAudio2MasteringVoice: 이 데이터 형식을 사용하여 오디오 출력 장치를 나타냅니다. 데이터 버퍼는 마스터링 보이스에 직접 제출할 수 없습니다. 그러나 들리려면 다른 유형의 보이스에 제출된 데이터가 마스터링 보이스로 향해야 합니다.
-
PlaySoundVoiceContext: 이 데이터 형식을 사용하여 처리 후 오디오 버퍼를 해제합니다. -
IXAudio2VoiceCallback: 이 데이터 형식은 특정IXAudio2SourceVoice에서 특정 이벤트가 발생할 때 클라이언트에 알림을 제공하는 메서드를 포함합니다.
XAudio2 초기화
CoInitializeEx()는 현재 스레드에서 사용하기 위한 Component Object Model(COM)을 초기화합니다. 첫 번째 매개변수를 NULL로 설정하십시오. 두 번째 매개변수를 COINIT_MULTITHREADED로 설정하십시오.
XAudio2Create()는 새 XAudio2 오브젝트를 생성하고 그 IXAudio2 인터페이스에 대한 포인터를 반환합니다. XAUDIO2_PROCESSOR가 유효한 값으로 설정되어 있는지 확인하십시오. OS가 하드웨어 플랫폼에 따라 이상적인 프로세서를 선택하도록 하려면 XAUDIO2_USE_DEFAULT_PROCESSOR 값을 권장합니다.
IXAudio2::CreateMasteringVoice()는 마스터링 보이스를 생성하고 구성하며, 사용자가 제공한 포인터로 이를 가리킵니다.
C++
.wav 파일 로드
오디오 파일에 액세스하려면WaveFile 클래스의 인스턴스를 사용하십시오.
- .wav 파일을 열고 파일 헤더에 저장된 일부 정보를 검색하려면
WaveFile::Open(LPCWSTR strFileName)을 호출하십시오. - .wav 파일의 형식을 결정하려면
WaveFile::GetFormat()을 호출하십시오. - .wav 파일의 바이트 및 샘플 수를 결정하려면
WaveFile::GetDuration()을 호출하십시오. - 샘플 데이터를 메모리로 읽으려면
WaveFile::ReadSample()을 호출하십시오.
C++
.wav 파일 경로 설정
오디오 파일을 로드하고 사용하려면 다음 코드를 사용하여 로컬 장치에서 프로젝트의 설치 위치를 찾으십시오. 설치 위치를 문자열에 저장하십시오. 오디오 파일의 위치를 설치 위치 문자열의 끝에 추가하십시오.C++
.wav 파일 재생
IXAudio2::CreateSourceVoice() 클래스를 생성한 다음, 이를 사용하여 XAudio2 처리 파이프라인에 오디오 데이터를 제출하십시오. 보이스 데이터가 들리려면 마스터링 보이스로 직접 또는 중간 서브믹스 보이스를 통해 전송해야 합니다. 오디오 파일의 세부사항을 저장하려면 XAUDIO2_BUFFER를 생성하십시오.
XAudio2 버퍼와 소스 보이스를 생성하고 초기화한 후, IXAudio2SourceVoice::SubmitSourceBuffer()를 호출하여 오디오 버퍼를 보이스 입력 큐에 추가합니다. XAUDIO2_BUFFER::pAudioData가 가리키는 오디오 데이터는 XAudio2가 버퍼의 내용 재생을 완료할 때까지 유효한 상태로 유지되어야 합니다.
보이스 입력 큐가 채워진 후, IXAudio2SourceVoice::Start()를 호출하여 큐의 다음 사운드를 재생합니다.
C++
.wav 파일 종료
.wav 파일이 완료까지 재생되었는지 확인하려면 소스 보이스의 현재 상태가 필요합니다.XAUDIO2_VOICE_STATE struct를 생성한 다음 IXAudio2SourceVoice::GetState()를 호출하십시오. 오디오가 완료까지 재생되었다면 IXAudio2SourceVoice::DestroyVoice()를 호출하십시오.
