使用Windows API将波形音频转储到stdout

Dumping wave audio to stdout using Windows API

本文关键字:转储 stdout 音频 波形 Windows API 使用      更新时间:2023-10-16

我一直在做一个非常有趣的项目,我想在PCM 44100 Hz 16位的窗口上从立体声混音中捕获音频,并通过netcat(使用cygwin)将其打包。

这个项目的目标是能够将windows输出音频连接到局域网上某个地方的pulseudio服务器。

到目前为止,我已经能够将音频转储到.wav文件中,并将该文件定位并管道传输到netcat,从而成功地将其传输到pulseudio服务器。

这很好,但我想使用从客户端到netcat的直接管道来运行它,所以音频必须发送到stdout。

问题是,我无法让windows将音频写入stdout,到目前为止,我一直在使用mmioOpen函数:

//Original instruction, where filename is a LPWSTR with the file name
//outputFile=mmioOpen(filename,&MMinfo,MMIO_WRITE | MMIO_CREATE);
//New instruction, quite dirty
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
outputFile=(HMMIO)out;
//Rest of the function

不起作用,我一直在阅读文档,还试图设置一个MMOINFO结构来指向stdout HANDLE等等,但没有成功。

我在文档中找不到任何关于是否可以通过mmioOpen使用stdout作为输出HANDLE的信息。

我曾想过使用一个中间文件作为缓冲区,并将其放在一个单独的线程中的stdout中,但我认为这对延迟没有好处,也不是解决这个问题的正确方法。

有人知道是否有其他方法可以捕获音频并将其直接写入stdout吗?

mmioOpen返回的句柄不是"输出句柄"。它只适用于传递给其他mmio函数。

但是你为什么要使用mmioOpen?它用于读取WAV文件。要获得实时音频数据,请使用waveInOpen和相关的waveIn。。。功能。