다음을 통해 공유


오디오 데이터 블록

[이 페이지와 연결된 기능인 파형 오디오는 레거시 기능입니다. WASAPI오디오 그래프로 대체되었습니다. WASAPI오디오 그래프는 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 파형 오디오 대신 WASAPI오디오 그래프를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

waveInAddBufferwaveOutWrite 함수를 사용하려면 애플리케이션이 기록 또는 재생을 위해 디바이스 드라이버에 전달할 데이터 블록을 할당해야 합니다. 이러한 두 함수는 WAVEHDR 구조를 사용하여 해당 데이터 블록을 설명합니다.

이러한 함수 중 하나를 사용하여 데이터 블록을 디바이스 드라이버에 전달하기 전에 데이터 블록 및 데이터 블록을 설명하는 헤더 구조에 대한 메모리를 할당해야 합니다. 다음 함수를 사용하여 헤더를 준비하고 준비할 수 있습니다.

함수 설명
waveInPrepareHeader 파형 오디오 입력 데이터 블록을 준비합니다.
waveInUnprepareHeader 파형 오디오 입력 데이터 블록에 대한 준비를 정리합니다.
waveOutPrepareHeader 파형 오디오 출력 데이터 블록을 준비합니다.
waveOutUnprepareHeader 파형 오디오 출력 데이터 블록에 대한 준비를 정리합니다.

 

오디오 데이터 블록을 디바이스 드라이버에 전달하기 전에 waveInPrepareHeader 또는 waveOutPrepareHeader에 전달하여 데이터 블록을 준비해야 합니다. 디바이스 드라이버가 데이터 블록으로 완료되고 반환되면 할당된 메모리를 해제하기 전에 waveInUnprepareHeader 또는 waveOutUnprepareHeader에 데이터 블록을 전달하여 이 준비를 클린 합니다.

파형 오디오 입력 및 출력 데이터가 단일 데이터 블록에 포함될 수 있을 만큼 작지 않으면 애플리케이션은 재생 또는 녹음이 완료될 때까지 디바이스 드라이버에 데이터 블록을 지속적으로 제공해야 합니다.

단일 데이터 블록을 사용하는 경우에도 애플리케이션은 애플리케이션이 데이터 블록 및 헤더 구조와 연결된 메모리를 해제할 수 있도록 디바이스 드라이버가 데이터 블록으로 완료되는 시기를 확인할 수 있어야 합니다. 디바이스 드라이버가 데이터 블록으로 완료되는 시기를 결정하는 방법에는 여러 가지가 있습니다.

  • 데이터 블록으로 완료될 때 드라이버가 보낸 메시지를 수신하도록 콜백 함수를 지정합니다.
  • 이벤트 콜백 사용
  • 데이터 블록으로 완료될 때 드라이버가 보낸 메시지를 받을 창 또는 스레드를 지정합니다.
  • 각 데이터 블록과 함께 전송된 WAVEHDR 구조체의 dwFlags 멤버에서 WHDR_DONE 비트를 폴링합니다.

애플리케이션이 필요할 때 디바이스 드라이버에 대한 데이터 블록을 얻지 못하는 경우 재생 시 가청 간격이 발생하거나 들어오는 기록된 정보가 손실될 수 있습니다. 이를 위해서는 디바이스 드라이버보다 하나 이상의 데이터 블록을 유지하는 이중 버퍼링 체계가 필요합니다.

다음 topics 디바이스 드라이버가 데이터 블록으로 완료되는 시기를 확인하는 방법을 설명합니다.

콜백 함수를 사용하여 드라이버 메시지 처리