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

标签 c++ windows audio stdout capture

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

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

到目前为止,我已经能够将音频转储到一个 .wav 文件,然后对该文件进行 catting 并将其通过管道传输到 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 结构以指向 stdout HANDLE 等等,但无济于事。

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

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

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

最佳答案

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

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

关于c++ - 使用 Windows API 将波形音频转储到标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17452300/

相关文章:

c++ - C\C++ : Initialize ASCII special char?

c++ - 3点之间的角度?

c++ - 从 UnicodeString 创建 CData 节点时的 XML 无效字符

javascript - 在 Windows/iOS/Android 等上移植 Javascript 应用程序

audio - 播放:音视频同步算法

c++列表迭代器的段错误

windows - 如何使用 PowerShell 将项目可靠地复制到 mtp 设备?

c - 变量的值存储在 C 中的位置

python webrtc语音事件检测错误

jquery - 使用 jQuery 确定 HTML5 音频何时暂停或轨道结束