我正在为 windows 寻找一些 pulseaudio 的替代品。在 linux 下,有一种非常简单的方法可以输出原始声音(使用 pulseaudio):
pa_simple_write(pulse, data, bufferSize, &error);
它非常适合小型缓冲区,我发送到循环中运行。
在windows下我使用这样的东西:
void writeAudioBlock(HWAVEOUT hWaveOut, LPSTR block, DWORD size)
{
WAVEHDR header;
ZeroMemory(&header, sizeof(WAVEHDR));
header.dwBufferLength = size;
header.lpData = block;
waveOutPrepareHeader(hWaveOut, &header, sizeof(WAVEHDR));
ResetEvent(waveDone);
waveOutWrite(hWaveOut, &header, sizeof(WAVEHDR));
WaitForSingleObject(waveDone, INFINITE);
waveOutUnprepareHeader(
hWaveOut,
&header,
sizeof(WAVEHDR)
);
}
它正在工作,但是当我发送另一条数据时,我听到各条之间的延迟很小。将小块数据缓冲区输出到声音设备的任何其他方式?