【问题标题】:Reading raw audio values from ADC chip on raspberry pi从树莓派上的 ADC 芯片读取原始音频值
【发布时间】:2015-03-31 08:30:07
【问题描述】:

我将 MCP3008 ADC 芯片连接到驻极体麦克风和我的 pi。我在 python 中使用 bit-banging 读取输入,我得到一个 0-1024 之间的整数。

我按照本教程进行了 bit-banging:https://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi/connecting-the-cobbler-to-a-mcp3008

我的问题是如何获取这个整数并将其转换为有意义的值?我可以以某种方式将这些字节写入 python 中的文件以获取 Audacity 可以播放的原始音频数据吗?现在,当我尝试编写值时,它们只是显示为整数而不是二进制。我对python真的很陌生,我找到了这个转换原始数据的链接,但是我无法先生成原始数据:Python open raw audio data file

我什至不确定这些值代表什么,它们是我必须用与时间相关的数学运算的 PCM 数据吗?

【问题讨论】:

  • 我在这里找到了如何在 python 中正确写入二进制数据:stackoverflow.com/questions/846038/…
  • 只是古玩,你有没有得到这个工作,以及如何?我正在从 arduino 读取数据并将该数据直接提供给 Raspberry pi,但不知道如何处理这些数据。您是否只是将这些 int 以字节的形式保存到文件中,然后 audacity 可以将其提取出来?对此一无所知
  • 杰克,人们在问你是否已经得到这个工作并且可以分享任何东西。谢谢

标签: python audio raspberry-pi adc


【解决方案1】:

您在这里所做的是对随时间变化的模拟信号进行采样。所以是的,您获得的值是 PCM - 但有一个很大的警告(见下文)。如果您将它们编写为 WAV 文件(可能使用this 来帮助您),您将能够在 Audacity 中打开它们。您可以将这些值转换为无符号的 8 位(通过截断和)或转换为 16 位有符号的移位和减法。

需要注意的是,PCM 是采样时钟与信号的调制。在您的情况下,时钟信号是您对 ADC 进行 bit-bang 的频率。 实际上,很难将其安排在软件中是常规的——尤其是在使用 Python 等高级语言对设备进行位敲击时。您需要以信号带宽的两倍(奈奎斯特定律)进行采样 - 实际上,电话语音质量为 8kHz。

不规则的采样时钟也会导致明显的伪影 - 您会听到失真。

【讨论】:

  • 感谢您提供此信息。原来 Audacity 可以播放原始文件,但正如你提到的那样,python 对此没有好处。我必须用 C 重写代码以实现足够快的采样率。 Python 的最高频率约为 6khz,并且由于未知的垃圾收集时间而非常不规则。
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2017-01-22
  • 1970-01-01
相关资源
最近更新 更多