开发环境
- MCU:Pico1(无wifi版)
- 使用模块:Max9814
- 使用固件:自编译版本
- 开发环境:MacBook Pro Sonoma 14.5
- 开发工具:Thonny 4.1.6
- 开发语言:MicroPython 1.24.0
ADC采样
- 这个小模块的out接pico的GP26,声音会失真,但是做语音识别够用
import machine
import array
import time
# 配置音频输入引脚
audio_pin = machine.ADC(26) # ADC0引脚
# 配置采样率和采样位数
sample_rate = 8000 # 8kHz采样率
sample_width = 16 # 16位采样位数
# 配置WAV文件参数
num_channels = 1 # 单声道
byte_rate = sample_rate * num_channels * sample_width // 8
block_align = num_channels * sample_width // 8
# 定义WAV文件头
def write_wav_header(file, num_samples):
file.write(b'RIFF')
file.write((36 + num_samples * num_channels * sample_width // 8).to_bytes(4, 'little'))
file.write(b'WAVE')
file.write(b'fmt ')
file.write((16).to_bytes(4, 'little')) # fmt子块大小
file.write((1).to_bytes(2, 'little')) # PCM格式
file.write((num_channels).to_bytes(2, 'little'))
file.write((sample_rate).to_bytes(4, 'little'))
file.write((byte_rate).to_bytes(4, 'little'))
file.write((block_align).to_bytes(2, 'little'))
file.write((sample_width).to_bytes(2, 'little'))
file.write(b'data')
file.write((num_samples * num_channels * sample_width // 8).to_bytes(4, 'little'))
# 录制音频并保存为WAV文件
def record_and_save(filename, duration):
num_samples = duration * sample_rate
audio_data = array.array('h', [0] * num_samples) # 使用短整型数组存储音频数据
print("开始录制...")
for i in range(num_samples):
audio_data[i] = audio_pin.read_u16() - 32768 # 读取ADC值并转换为有符号整数
time.sleep_us(1000000 // sample_rate) # 控制采样间隔
print("录制完成.")
with open(filename, 'wb') as f:
write_wav_header(f, num_samples)
f.write(audio_data)
# 录制5秒音频并保存为audio.wav
record_and_save("audio.wav", 3)