0

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

该项目的目标是能够将 Windows 输出音频连接到 LAN 上某处监听的 pulseaudio 服务器。

到目前为止,我已经能够将音频转储到一个 .wav 文件中,并将该文件通过管道传输到 netcat 并将其成功传递到 pulseaudio 服务器。

这很好,但我想使用从客户端到 netcat 的直接管道运行它,因此必须将音频发送到标准输出。

问题是我无法让 Windows 将音频写入标准输出,到目前为止,我一直在使用 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

不工作,我一直在阅读文档,并且我还尝试设置一个 MMIOINFO 结构来指向标准输出 HANDLE 等,但无济于事。

我在文档中找不到有关是否可以通过 mmioOpen 将标准输出用作输出句柄的信息。

我曾考虑过使用中间文件作为缓冲区,并继续将其放入单独线程中的标准输出中,但我认为这对延迟没有好处,也不是解决此问题的正确方法。

任何人都知道是否有另一种方法来捕获音频并将其直接写入标准输出?

4

1 回答 1

1

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

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

于 2013-07-03T17:11:44.297 回答