【问题标题】:C - how can I capture sound from the microphone? [duplicate]C - 如何从麦克风捕捉声音? [复制]
【发布时间】:2012-10-16 20:31:33
【问题描述】:

可能重复:
How to get PCM data from microphone in C++ (os Windows)?

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

【问题讨论】:

  • 你试过什么?你至少试着用谷歌搜索一下吗?在 stackoverflow,我们帮助您解决问题,而不是为您设计系统。
  • 我尝试使用 WaveIn 命令,但无法处理:msdn.microsoft.com/en-us/library/aa452431.aspx

标签: c winapi audio capture


【解决方案1】:

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

您可以阅读Recording and Playing Sound with the Waveform Audio Interface 了解概览,或者直接深入了解API documentation

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多