IXAudio2SourceVoice::FlushSourceBuffers 메서드(xaudio2.h)
음성 큐에서 보류 중인 모든 오디오 버퍼를 제거합니다.
구문
HRESULT FlushSourceBuffers();
반환 값
성공하면 S_OK 반환하고, 그렇지 않으면 오류 코드를 반환합니다.
설명
음성이 시작되면 현재 재생 중인 버퍼가 큐에서 제거되지 않습니다.
음성이 현재 시작 또는 중지되었는지 여부에 관계없이 FlushSourceBuffers를 호출할 수 있습니다.
제거된 모든 버퍼 에 대해 OnBufferEnd 콜백이 수행되지만 버퍼당 다른 콜백(OnBufferStart, OnStreamEnd 또는 OnLoopEnd)은 수행되지 않습니다.
FlushSourceBuffers 는 음성의 실행 상태를 변경하지 않으므로 음성이 호출 전에 버퍼를 재생하는 경우 계속 수행되며 일반적으로 버퍼에 대한 모든 콜백을 전달합니다. 즉, 이 버퍼에 대한 OnBufferEnd 콜백은 제거된 버퍼 에 대한 OnBufferEnd 콜백 후에 발생합니다. 따라서 FlushSourceBuffers 를 호출하는 XAudio2 클라이언트는 버퍼가 제출된 순서대로 OnBufferEnd 콜백을 받을 것으로 예상할 수 없습니다.
현재 재생 중인 버퍼가 완료되면 버퍼 큐의 고갈에 대한 경고가 내보내지지 않습니다. 클라이언트가 의도적으로 버퍼를 제거한 것으로 가정합니다. 그러나 이 버퍼가 0 교차에서 끝나지 않으면 오디오 팝이 있을 수 있습니다. 애플리케이션에서 특정 버퍼가 재생되는 동안 플러시 작업이 수행되도록 해야 하는 경우(아마도 버퍼가 교차가 0으로 끝나기 때문에) 동기적으로 실행되도록 콜백에서 FlushSourceBuffers 를 호출해야 합니다.
음성이 중지된 후 FlushSourceBuffers 를 호출한 다음 음성에 새 데이터를 제출하면 음성의 모든 내부 카운터가 다시 설정됩니다.
OnBufferEnd 콜백이 발생하거나(버퍼가 이전에 제출된 경우) IXAudio2SourceVoice::GetState가 XAUDIO2_VOICE_STATE 함께 반환될 때까지 Voice의 상태는 FlushSourceBuffers를 호출한 후 재설정된 것으로 간주되지 않습니다. BuffersQueued == 0. 예를 들어 음성을 중지하고 FlushSourceBuffers를 호출하는 경우 앞에서 언급한 조건 중 하나가 충족될 때까지 IXAudio2SourceVoice::SetSourceSampleRate (음성에 현재 큐에 대기 중인 버퍼가 없어야 합니다)를 즉시 호출하는 것은 여전히 합법적이지 않습니다.
플랫폼 요구 사항
Windows 10(XAudio2.9); Windows 8, Windows Phone 8(XAudio 2.8); DirectX SDK(XAudio 2.7)요구 사항
대상 플랫폼 | Windows |
헤더 | xaudio2.h |