1

可能重复:
如何在 C++(操作系统 Windows)中从麦克风获取 PCM 数据?

如何从麦克风捕获声音,并在另一台计算机上实时听到?谢谢。

4

3 回答 3

3

最简单的方法是使用Win32 API 提供的waveIn函数。

您可以阅读使用波形音频接口录制和播放声音以获得概述,或者只是深入研究API 文档

于 2012-10-16T20:35:42.643 回答
0

另一个简单的音频 i/o 解决方案是portaudio。除了便携之外,它还非常易于使用。

正如另一个答案指出的那样,要通过网络获取音频数据,您应该知道您的数据是巨大的。但是,一个好的起点是尝试发送原始数据。一旦你能做到这一点,那么你就可以担心压缩它——你需要一步一步地解决一个复杂的问题。最终,您可能希望将 UDP 用于原始音频数据包。

用于发送音频、视频、聊天和其他数据的好库是 google 的libjingle,它实现了 google talk 协议。它解决了 UDP 与 TCP、防火墙等的许多问题。无论如何,您可能会发现它有点难以使用,因为它有很多代码,并且您需要使用您可能不熟悉的 XMPP。此外,它是 C++,而不是 C。它还需要一些服务器中介,尽管您可以使用 google 的服务器。如果这对你不起作用,你可以做一些自产的事情,但你可能会发现你需要做一些工作才能把它做好。

我相信有一些图书馆可以帮助你。尝试在谷歌上搜索诸如“internet telephony library c”和“voip c library”之类的东西(即使这不是,在最严格的意义上,voip)

于 2012-10-17T14:38:28.137 回答
0

要录制,您可以使用 win32API 中的 waveIn 函数。

但是在发送之前,请记住通过waveIn函数进入字节缓冲区的数据是PCM格式,它很容易阻塞您的网络。您必须先将 PCM 数据压缩成 aLaw 或 uLaw 格式,然后才能通过 WinSOCK API 进行隧道传输。否则,它肯定不会是“实时”提要,也会占用大量带宽。

于 2012-10-16T20:38:35.790 回答