gpt4 book ai didi

c++ - winapi音频输出

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:51 25 4
gpt4 key购买 nike

我正在为 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)
);
}

它工作正常,但是当我发送另一段数据时,我听到数据段之间有很小的延迟。还有其他方法可以将小块数据缓冲区输出到声音设备吗?

最佳答案

如果你想播放一些音频文件,你可以使用windows API中的PlaySound函数。

对于存储在内存中的数据 block ,您必须使用 Waveform API - waveOutXXX 函数。

对于音频 block 之间的延迟问题,您必须使用某种双缓冲机制。

你可以在这里找到一个例子: double buffering

关于c++ - winapi音频输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10833479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com