다음을 통해 공유


방법: XAudio2로 소리 재생

이 항목에서는 XAudio2에서 이전에 로드한 오디오 데이터를 재생하는 데 필요한 최소 단계를 설명합니다.

XAudio2를 초기화하고( 방법: XAudio2 초기화) 오디오 데이터를 로드한 후(방법: 방법: XAudio2에서 오디오 데이터 파일 로드) 원본 음성을 만들고 오디오 데이터를 전달하여 소리를 재생할 수 있습니다.

소리를 재생하려면

  1. 먼저 방법: XAudio2 초기화에 설명된 단계에 따라 오디오 재생을 위해 XAudio2를 초기화합니다.

  2. 그런 다음, 방법: XAudio2에서 오디오 데이터 파일 로드에 설명된 단계에 따라 WAVEFORMATEX 구조체 및 XAUDIO2_BUFFER 구조를 채웁다.

    참고 항목

    오디오 데이터의 형식에 따라 WAVEFORMATEX 대신 더 큰 데이터 구조(WAVEFORMATEX 구조를 포함하는 구조체)를 사용해야 할 수 있습니다. 자세한 내용은 WAVEFORMATEX 항목을 참조하세요.

  3. 다음으로, 소스 음성이라고 하는 것을 만들려면 IXAudio2::CreateSourceVoice 메서드를 호출합니다. 그러면 IXAudio2SourceVoice 인터페이스에 대한 포인터가 제공됩니다. 음성의 형식은 WAVEFORMATEX 구조체에 설정된 값으로 지정됩니다.

    IXAudio2SourceVoice* m_pXAudio2SourceVoice{};
    ...
    winrt::check_hresult(m_xAudio2->CreateSourceVoice(&m_pXAudio2SourceVoice, (WAVEFORMATEX*)&wfx)));    
    
  4. IXAudio2SourceVoice::SubmitSourceBuffer 메서드를 호출하여 소스 음성에 XAUDIO2_BUFFER 제출합니다.

    winrt::check_hresult(m_pXAudio2SourceVoice->SubmitSourceBuffer(&xAudio2Buffer));
    

    참고 항목

    SubmitSourceBufferpBuffer 매개 변수가 가리키는 오디오 샘플 데이터는 여전히 앱에서 소유하고 있으며, 소리가 재생을 중지할 때까지 할당되고 액세스할 수 있어야 합니다.

  5. 원본 음성을 시작하려면 IXAudio2SourceVoice::Start 메서드를 호출합니다. 모든 XAudio2 음성은 기본적으로 마스터링 음성으로 출력을 보내므로 원본 음성의 오디오는 초기화 시 생성/선택된 오디오 장치로 자동 전환됩니다. 더 복잡한 오디오 그래프에서 원본 음성은 출력을 보낼 음성을 지정해야 합니다.

    winrt::check_hresult(m_pXAudio2SourceVoice->Start(0));
    

스마트 포인터

안전성과 편의를 위해 IXAudio2 인터페이스에 스마트 포인터를 사용할 수 있습니다. 그러나 음성 인터페이스(예: IXAudio2MasteringVoice)에는 릴리스 메서드가 없으므로 스마트 포인터를 사용하려고 하면 빌드 오류가 표시됩니다. 이러한 코드 조각에서는 가능한 경우 스마트 포인터와 필요한 경우 원시 포인터를 사용합니다.