C++ 使用Windows API将波形音频转储到标准输出

C++ 使用Windows API将波形音频转储到标准输出,c++,windows,audio,stdout,capture,C++,Windows,Audio,Stdout,Capture,我一直在从事一个非常有趣的项目,我想用PCM 44100 Hz 16位从windows上的立体声混音中捕获音频,并用netcat(使用cygwin)通过网络将其打包 该项目的目标是能够将windows输出音频连接到pulseaudio服务器,该服务器在LAN上的某个地方进行监听 到目前为止,我已经能够将音频转储到一个.wav文件中,然后将该文件传输到netcat并将其成功地传输到pulseaudio服务器 这很好,但我想使用从客户端到netcat的直接管道来运行它,所以音频必须发送到stdout

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

该项目的目标是能够将windows输出音频连接到pulseaudio服务器,该服务器在LAN上的某个地方进行监听

到目前为止,我已经能够将音频转储到一个.wav文件中,然后将该文件传输到netcat并将其成功地传输到pulseaudio服务器

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

问题是我无法让windows将音频写入标准输出,到目前为止,我一直使用mmiopen函数:

//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
不工作,我一直在阅读文档,我还尝试设置一个MMIOINFO结构来指向stdout句柄等等,但没有效果

我在文档中找不到关于是否可以通过mmiopen将stdout用作输出句柄的信息

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


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

mmiopen返回的句柄不是“输出句柄”。它仅在传递给其他mmio函数时有用


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

好的,你说得对,我不知道我使用的mmiopen函数是做什么用的,我使用了waveInProc函数将收集到的数据写入标准输出句柄,效果很好:)请发布你是如何使用waveInProc在标准输出上写的?