如何在ESP32上使用MicroPython录制音频?

3

我是一名经验丰富的Python开发者,但在电子方面是一个完全的新手。

我有一个已安装MicroPython的ESP32板,并连接了一个麦克风。

我能够读取到麦克风的数据,如下所示:

MicroPython v1.9.4 on 2018-05-11; ESP32 module with ESP32
Type "help()" for more information.
>>> import machine
>>> a = machine.ADC(machine.Pin(32))
>>> a.read()
488
>>> a.read()
496
>>> a.read()
449

我的问题是:我应该如何录制音频,以便通过电子邮件发送?Wave格式或任何其他格式均可。我猜测,任何实现都只是循环采样级别并构建一个数组,但如果已经存在一个实现,而不必让我自己编写,则更好。


数字音频的基本概念包括:采样率,即每秒钟麦克风采样输出单个整数值的次数,该值表示该时刻原始音频曲线的高度...另一个概念是位深度,它表示为每个音频采样分配的存储大小... CD质量使用16位深度,这意味着它使用2字节的数据类型...总体概念是PCM音频-脉冲编码调制-在涉及音频时安装Audacity非常方便,可以播放和可视化音频文件... WAV格式最简单。 - Scott Stensland
你确定你连接麦克风到ESP32的方式是适当的吗?通常情况下,你不能直接将麦克风线路连接到MCU模拟输入,需要进行某种级别转换和可能的放大。电子问题不适合在此网站讨论,但欢迎在电子工程上提问。如果有关于MicroPython音频录制的问题,建议在论坛上提问。 - nekomatic
1个回答

0
一个基本的想法是对[1]进行采样并以CD质量进行编码[2]:16位,44100 Hz。
import machine, time
a = machine.ADC(machine.Pin(32))
while True:
    sample = a.read() * 2**(16-10)  # we want 16 bits, a.read() returns 10 bits
    print(sample)
    time.sleep(1/44100)

您应该能够运行此代码并在控制台中看到每个样本的值。当您在麦克风中说话时,它应该上下波动。

它非常接近 PCM 音频格式(WAV):以每秒 44100 次的频率编码为 16 位值序列。

更多信息请参见:


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