python - 从树莓派上的 ADC 芯片读取原始音频值

标签 python audio raspberry-pi adc

我将 MCP3008 ADC 芯片连接到驻极体麦克风和我的 pi。我在 python 中使用位碰撞读取输入,我得到一个 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 数据吗?

最佳答案

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

需要注意的是,PCM 是采样时钟与信号的调制。在您的情况下,时钟信号是您对 ADC 进行位冲击的频率。 实际上,很难在软件中安排这种规则 - 特别是当从高级语言(如 Python)对设备进行位冲击时。您需要以信号带宽的两倍(奈奎斯特定律)进行采样 - 实际上,电话语音质量为 8kHz。

不规则的采样时钟也会导致明显的人工制品 - 您会听到失真。

关于python - 从树莓派上的 ADC 芯片读取原始音频值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28260039/

相关文章:

python - ValueError : The truth value of array with more than one element is ambiguous. 使用 a.any() 或 a.all()

python - Pandas Dataframe 列到 python 列表

python - 如何在 Pandas 中读取带有分号分隔符的文件

iphone - ipod网页可以播放音频吗?

docker - 在 OS X 上使用 Docker 模拟 Raspberry Pi

node.js - 启动时的 Node JS

c++ - 你如何告诉 pyximport 使用 cython --cplus 选项?

python - IndexError : too many indices for array when trying to plot a spectrogram of a . wav 文件

java - 声音捕捉。 MacOS 权限。 Java 音频 API

c++ - IBM Bluemix 树莓派发送传感器数据