【问题标题】:How to capture the microphone buffer raw data? [closed]如何捕获麦克风缓冲区原始数据? [关闭]
【发布时间】:2017-04-26 10:28:00
【问题描述】:

我需要捕获麦克风提供的原始数据(每隔几毫秒)。对于 Python 的偏好,但它也可以在 C/C++ 中。我正在使用 Linux/macOS。

如何捕获音频波(麦克风输入)以及它将是什么类型的数据?纯字节?包含一些数据的数组?

我想对麦克风信号进行实时幅度分析和(如果幅度达到确定值)实时 fft,但我不知道麦克风为我提供什么数据和多少数据的概念。

我看到很多设置为捕获 44.1kHz 音频的代码,但它会捕获所有这些数据吗?获取的数据部分取决于它是如何编程的?

【问题讨论】:

  • This question 包含用于捕获麦克风数据的工作 Python 代码。可能对你有用。
  • 如果您想要 C 或 Python 答案,为什么要添加 C++ 标签?
  • 它也可以是 C++。编辑了问题。
  • @kazemakase 感谢您的建议。
  • “如何用任何编程语言编写的代码录制声音”对于本网站来说是一个过于宽泛的问题。

标签: python c++ c linux signal-processing


【解决方案1】:

“我需要捕获麦克风提供的原始数据(每隔几毫秒)”

不,你没有。那是行不通的。即使您每毫秒捕获一次数据,恰好是 1000 微秒的倍数(无抖动),您的音频质量也会非常糟糕。 1000 Hz(每毫秒一次)的采样频率将奈奎斯特频率限制为 500 Hz。太低了。

“我想做实时幅度分析”。好吧,您忽略了 500 Hz 以上分量的幅度,这大约是可听频率的 98%。

“实时 fft” - 同样的问题,也会错过 98%。

您无法处理这样的原始音频。您必须依靠声卡来做繁重的工作,才能获得计时权。它可以每 21 微秒 采样一次声音,精度为微秒。您可以使用 ALSA 或 PulseAudio 或其他一些选项(在 Linux 上为您提供声音)与声卡对话。但是那里的建议会偏离主题。

【讨论】:

  • 非常感谢您的回答。我只是很难理解麦克风的工作原理以及如何获得“高质量”数据。你有任何文章谈论这个,所以我可以了解它是如何工作的?
  • 我正在阅读有关缓冲区大小的信息,大多数情况下是 1024。这是什么意思?
  • 表示有一个缓冲区,长度为 1024 个元素,每个元素可能是一个样本。
  • @Colin__s 每个元素都是一个波?每秒 1024 个元素?我不明白。
  • 不管他使用什么措辞,对我来说似乎很明显他想“每隔几毫秒”读取声卡提供的样本,而不是自己以那个速率对麦克风信号电平进行采样!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多