WASAPI在Windows上捕获缓冲区大小

我使用WASAPI在Windows 7上以共享模式捕获audio缓冲区。我使用只能采样率为48 kHz,96 kHz,192 kHz或44.1 kHz采样率的扬声器。 我的声卡是一个Realtek高清晰度。

我需要知道,如果我在Windows Vista或Windows 8等另一个操作系统上执行我的程序,WASAPI将有不同的行为。此外,我需要知道如果getBuffer将检索具有不同硬件(不同的声卡)捕获的缓冲区相同的大小。

我无法自行testing,也无法在互联网上find很多细节。 但是我的程序必须在具有不同版本的Windows和不同硬件的不同计算机上工作。 如果捕获的缓冲区大小不同,我的程序将无法在另一台计算机上正常工作

如果有人知道这件事,请告诉我。 谢谢。

在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);