계속해서 데이터를 IAudioClient
(GetBufferSize/GetCurrentPadding/GetBuffer/ReleaseBuffer
)으로 보내지 만, 오디오 장치가 마지막으로 보낸 데이터를 재생할 때를 알고 싶습니다. 마지막으로 데이터 덩어리를 장치에 보냈기 때문에 플레이어가 멈춘 것으로 가정하고 싶지는 않습니다. 버퍼링 된 데이터를 재생 중일 수 있습니다.IAudioClient - 재생이 끝나면 알림을 받습니까?
하드웨어 버퍼 위치를 확인하기 위해 IAudioClock
/IAudioClock2
을 사용해 보았지만 마지막 청크를 보내는 순간부터 동일하게 유지되었습니다.
나는 또한 IMMNotificationClient
및 IAudioSessionNotification
인터페이스에 관련된 아무것도 표시되지 않습니다 ...
나는 무엇을 놓치고?
감사합니다.
IAudioClock :: GetPosition/등은 오디오 재생 여부에 관계없이 항상 동일한 값을 반환합니다. IAudioMeterInformation.GetPeakValue를 사용하고 반환 된 값이 == 0인지 확인할 수 있습니다. 내 경우에는 효과가있는 것 같습니다 (오디오는 적어도 주위의 잡음이 녹음 된 마이크입니다).하지만 제네릭으로는별로 좋아하지 않습니다. 솔루션 - 오디오 스트림에서 음소거 기간을 가질 수 있습니다. –
AudioClock은 스트림을 중단하지 않는 한 지속적으로 증가하는 위치를 반환해야합니다. 문제를 재현하는 샘플 코드가 있습니까? –
아무 것도 게시 할 수 없습니다 - 데이터를 스트리밍하는 스트림 응용 프로그램 (잘 작동합니다)이 있으며 스트리밍하는 동안 타이머가 50ms마다 테스트되고 AudioClock :: GetPosition이 호출됩니다. 두 반환 값이 모두 기록됩니다. 기기는 항상 동일하게 유지되며 기기를 다시 초기화 할 때만 다릅니다. –