2014-07-11 2 views
2

WASAPI를 사용하여 Windows 7에서 공유 모드로 오디오 버퍼를 캡처합니다. 48 kHz 샘플 속도, 96 kHz, 192 kHz 또는 44.1 kHz 샘플 속도 만 사용할 수있는 라우드 스피커를 사용합니다. 내 사운드 카드는 Realtek High Definition입니다.WASAPI가 Windows에서 버퍼 크기를 캡처했습니다.

Windows Vista 나 Windows 8과 같은 다른 OS에서 프로그램을 실행하면 WASAPI가 다르게 작동하는지 알아야합니다. 또한 getBuffer가 다른 하드웨어로 캡처 된 버퍼에 대해 동일한 크기를 검색하는지 사운드 카드).

나는 독자적으로 테스트 할 수 없으며 인터넷에서 많은 세부 정보를 찾을 수 없습니다. 그러나 내 프로그램은 다른 버전의 Windows와 다른 하드웨어로 다른 컴퓨터에서 작동해야합니다. 캡쳐 된 버퍼 크기가 다른 경우 내 프로그램이 다른 컴퓨터에서 올바르게 작동하지 않습니다.

누구든지 그것에 대해 알고 있다면 알려 주시기 바랍니다. 고맙습니다.

답변

1

Capturing a Stream (MSDN)은 오디오 장치에서 반환 된 특정 바이트 수 (샘플)를 사용하지 않고 데이터를 캡처하는 방법을 보여주는 코드 스 니펫을 제공합니다. 캡처 논리는 이후 처리를 위해 충분한 양의 연속적인 데이터를 축적하는 내부 버퍼로 버퍼에서 복사해야합니다. 또한 특정 상황에서 캡처 루프가 샘플을 잃을 수 있으며 데이터 스트림에 불연속성이 있음을 유의하십시오. 이것은 기본적으로 스트림의 모든 부분에서 발생할 수 있으며 약 바이트/버퍼를 줄일 수 있습니다. 당신도이 문제를 우아하게 처리하는 데 관심이 있습니다.

// Get the available data in the shared buffer. 
hr = pCaptureClient->GetBuffer(&pData, &numFramesAvailable, &flags, NULL, NULL); 
if (flags & AUDCLNT_BUFFERFLAGS_SILENT) 
{ 
    // TODO: Tell CopyData to write silence. 
} 
// Copy the available capture data to the audio sink. 
hr = pMySink->CopyData(pData, numFramesAvailable, &bDone); 
+0

답변 해 주셔서 감사합니다. – user3783567

관련 문제