从树莓派的ADC芯片中读取原始音频值

6
我将MCP3008 ADC芯片连接到了一个电容麦克风和树莓派上。我使用Python进行比特带状读取并得到一个0-1024的整数输入。我按照这篇教程进行比特带状读取: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中正确编写二进制数据的方法,参考这里:https://dev59.com/3nRA5IYBdhLWcg3wvQhh - Jack Freeman
只是好奇,你最后解决了吗?怎么做到的?我正在从Arduino读取数据,并将数据直接传递给Raspberry pi,但不知道该如何处理这些数据。你是否只是将这些int作为字节保存到文件中,然后Audacity可以读取这些数据?在这方面我一无所知。 - Ricky Hartmann
杰克,有人在问你是否已经让这个工作并且可以分享一些东西。谢谢。 - Drew
1个回答

4
您在这里所做的是对一种时变模拟信号进行采样。因此,您获得的值是PCM格式的,但需要注意以下内容。如果您使用此工具将其写成WAV文件,您就可以在Audacity中打开它们。您可以将这些值转换为无符号8位(通过截断和)或16位带符号数通过移位和减法。
需要注意的是,PCM是一个样本时钟与信号的调制。在您的情况下,时钟信号是ADC的位控制频率。实际上,在软件中安排这个过程是非常困难的,特别是在使用高级语言如Python 时。您需要以信号带宽的两倍进行采样(奈奎斯特定理),因此,电话语音质量为8kHz的采样率是现实的。
不规则的采样时钟还会导致明显的伪影,这些伪影会听起来像失真。

感谢您提供这些信息。事实证明,Audacity可以播放原始文件,但正如您所提到的,Python对此无济于事。我必须将代码重写为C语言,以实现足够快的采样率。 Python的最高采样率约为6khz,并且由于未知的垃圾回收时间而高度不规则。 - Jack Freeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接