다음을 통해 공유


XAudio2 콜백

XAudio2는 클라이언트에서 제공하는 함수를 호출하여 오디오 처리 스레드에서 발생하는 특정 이벤트를 비동기적으로 알릴 수 있습니다. 이러한 콜백은 전역 또는 지정된 원본 음성과 관련될 수 있습니다. 글로벌 엔진 콜백을 받으려면 클라이언트는 XAudio2를 초기화할 때 IXAudio2EngineCallback 인터페이스를 구현하는 클래스의 인스턴스를 제공해야 합니다. 원본 음성 콜백을 받으려면 원본 음성을 만들 때 클라이언트가 IXAudio2VoiceCallback 인터페이스를 구현하는 클래스의 인스턴스를 제공해야 합니다. 자세한 내용은 IXAudio2EngineCallbackIXAudio2VoiceCallback참조하세요.

오디오에서 중단을 일으키지 않도록 콜백을 신중하게 구현해야 합니다. 콜백이 실행될 때마다 XAudio2는 오디오를 생성할 수 없습니다. 몇 밀리초 이상 지연되면 오디오 문제가 발생할 수 있습니다. 이러한 특성의 지연은 디버거 출력도 생성합니다. 이는 잠재적인 성능 문제를 나타냅니다. 최소한 콜백 함수는 다음을 수행하면 안 됩니다.

  • 하드 디스크 또는 기타 영구 스토리지에 액세스
  • 비용이 많이 들거나 API 호출을 차단합니다.
  • 클라이언트 코드의 다른 부분과 동기화
  • 상당한 CPU 사용량 필요

클라이언트 디자인에서 이전에 나열된 작업과 같은 작업을 트리거하기 위해 콜백이 필요한 경우 콜백은 작업을 수행하도록 다른 클라이언트 스레드에 신호를 보내야 합니다. 이렇게 하려면 간단한 SetEvent 메커니즘 또는 다른 스레드에서 사용하는 차단 해제 명령 큐와 같은 보다 정교한 메커니즘을 사용할 수 있습니다.

IXAudio2EngineCallback

IXAudio2EngineCallback 클래스에는 XAudio2 엔진에서 특정 이벤트가 발생할 때 클라이언트에 알리는 메서드가 포함되어 있습니다. 이러한 메서드는 XAudio2 클라이언트에서 구현해야 합니다. XAudio2는 IXAudio2::RegisterForCallbacks 메서드를 사용하여 클라이언트에서 제공하는 인터페이스 포인터를 통해 이러한 메서드를 호출합니다. 이러한 모든 메서드는 HRESULT아닌 void반환합니다.

IXAudio2VoiceCallback

IXAudio2VoiceCallback 클래스에는 특정 XAudio2 원본 음성에서 특정 이벤트가 발생할 때 클라이언트에 알리는 메서드가 포함되어 있습니다. XAudio2는 IXAudio2::CreateSourceVoice클라이언트에서 제공하는 인터페이스 포인터를 통해 이러한 메서드를 호출합니다. IXAudio2EngineCallback마찬가지로 이러한 메서드는 XAudio2 클라이언트에서 구현되어야 하며 HRESULT아닌 void 반환해야 합니다.

앞에서 설명한 것처럼 이러한 콜백의 클라이언트 제공 구현은 가능한 한 빨리 반환하는 것이 중요하며, 바람직하게는 밀리초 내에 반환해야 합니다. 콜백은 오디오 처리 스레드에서 실행되며 콜백이 반환될 때까지 모든 처리가 중단됩니다. 콜백이 지연되면 오디오 문제가 쉽게 발생할 수 있습니다.

콜백

XAudio2 프로그래밍 가이드

방법: 원본 음성 콜백 사용

방법: 엔진 콜백 사용

방법: 디스크 소리 스트리밍