Micropython RPI-PICO 随记-Max9814录制声音

开发环境

  • 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值