当前位置: 首页 > news >正文

K230基础-录放音频

第二十四章 录放音频-K230声音采集与播放能力

🎯 本章目标
掌握在 K230 开发板上实现音频录制与播放的方法。由于 K230 在 CanMV MicroPython 环境中不原生支持复杂音频编解码与 DAC 播放,本章将提供可行的音频处理方案,包括:

  • 使用外接 I2S 麦克风进行音频采集
  • 使用 PWM 模拟音频播放
  • 通过串口或网络传输音频数据
  • 结合外部模块(如 ESP32、专用音频芯片)实现完整音频功能

1. K230 音频能力现状

功能支持情况说明
I2S 输入(麦克风)⚠️ 部分支持可配置 I2S 采集 PCM 数据
I2S 输出(扬声器)❌ 通常不支持固件未暴露完整播放 API
PWM 模拟输出✅ 可行通过 GPIO 输出 PWM 模拟音频(低质量)
音频编解码(WAV/MP3)❌ 不支持无软件解码库
麦克风输入接口✅ 支持外接 I2S 麦克风(如 INMP441、SPH0645)

📌 结论
K230 更适合作为“音频采集终端”或“音频数据转发器”,不适合独立完成高质量音频播放


2. 硬件准备

2.1 推荐外设

设备型号接口用途
I2S 麦克风INMP441、SPH0645I2S高质量录音
I2S 扬声器MAX98357A + PAM8403I2S音频播放(需外部驱动)
PWM 播放无源蜂鸣器或小喇叭GPIO简单提示音
音频协处理器ESP32、K210UART/SPI音频编解码与播放

3. 音频录制:I2S 麦克风采集 PCM 数据

3.1 硬件连接(以 INMP441 为例)

麦克风引脚K230 引脚说明
BCLKI2S_BCLK(如 Pin13)位时钟
LRCLKI2S_WCLK(如 Pin14)左右声道选择
DINI2S_SDIN(如 Pin15)数据输入
GNDGND
VDD3.3V电源

3.2 FPIOA 映射与 I2S 初始化

from fpioa_manager import fm
from machine import I2S# I2S 引脚定义
BCLK_PIN = 13
WCLK_PIN = 14
SDIN_PIN = 15# FPIOA 映射
fm.register(BCLK_PIN, fm.fpioa.I2S0_BCLK)
fm.register(WCLK_PIN, fm.fpioa.I2S0_WCLK)
fm.register(SDIN_PIN, fm.fpioa.I2S0_SDIN)# 创建 I2S 对象(输入模式)
i2s = I2S(I2S.DEVICE_0,mode=I2S.MODE_PDM_RX,        # 或 MODE_I2S_RXbits=I2S.BITS_16,channel=I2S.CHANNEL_0,rate=16000,                  # 采样率align_mode=I2S.STANDARD_MODE # 标准 I2S 模式
)

⚠️ 注意
不同麦克风使用不同模式(PDM 或 I2S),请查阅数据手册。


3.3 录制 PCM 音频数据

import time
import os# SD 卡挂载(见第21章)
os.mount(sd, "/sd")# 开始录音
print("开始录音...")filename = "/sd/audio.raw"
f = open(filename, "wb")try:# 录制时长(秒)DURATION = 10start_time = time.ticks_ms()while time.ticks_diff(time.ticks_ms(), start_time) < DURATION * 1000:# 读取音频数据块audio_data = i2s.record(1024)  # 返回 bytearrayf.write(audio_data)print("已录制:", f.tell(), "字节")print("✅ 录音完成:", filename)except Exception as e:print("❌ 录音失败:", e)finally:f.close()i2s.finish()

生成文件audio.raw 为原始 PCM 数据,可在 PC 上用 Audacity 打开:

  • 格式:Raw Data
  • 编码:Signed 16-bit PCM
  • 采样率:16000 Hz
  • 声道:Mono

4. 音频播放:PWM 模拟输出(简单提示音)

4.1 使用 PWM 播放固定频率音调

from machine import Timer, PWM
from fpioa_manager import fm# 定义蜂鸣器引脚
BUZZER_PIN = 12
fm.register(BUZZER_PIN, fm.fpioa.PWM0_OUT)# 创建 PWM 对象
pwm = PWM(PWM.PWM0, freq=1000, duty=0.5, pin=BUZZER_PIN)# 播放音调
def play_tone(frequency, duration_ms):pwm.freq(frequency)pwm.duty(0.5)  # 50% 占空比time.sleep_ms(duration_ms)pwm.duty(0)    # 停止# 示例:播放“滴”声
play_tone(1000, 200)  # 1kHz,200ms

用途:系统提示音、报警声


4.2 播放简单旋律

# 音符频率表(C调)
tones = {'C4': 262, 'D4': 294, 'E4': 330, 'F4': 349,'G4': 392, 'A4': 440, 'B4': 494, 'C5': 523
}melody = [('C4', 200), ('E4', 200), ('G4', 200), ('C5', 400)]for note, duration in melody:play_tone(tones[note], duration)time.sleep_ms(50)  # 音符间隔

5. 播放录制的 PCM 音频(理论可行)

⚠️ 限制:K230 无法直接播放 raw 音频,但可通过 外部 DAC 或 ESP32 实现。

5.1 方案:串口转发到 ESP32 播放

# 在 K230 上发送音频数据
uart.write(audio_data)  # 通过 UART 发送给 ESP32

ESP32 接收并使用 I2S 播放 PCM 数据。


6. 实战项目:语音记录仪(带状态提示)

# 结合 OLED 显示录音状态import sensor
import i2s
import lcd
import time# 初始化 I2S(略)def record_with_prompt(duration=5):# 提示音play_tone(800, 100)# 显示lcd.fill(0)lcd.draw_string(10, 10, "Recording...", color=(255,255,255))# 录音f = open("/sd/voice.raw", "wb")start = time.ticks_ms()while time.ticks_diff(time.ticks_ms(), start) < duration * 1000:data = i2s.record(512)f.write(data)f.close()# 结束提示play_tone(1200, 100)lcd.draw_string(10, 30, "Saved", color=(0,255,0))

7. 高级方案:外接音频协处理器

7.1 使用 ESP32 实现 MP3 播放

  • K230 通过 UART 发送“播放 MP3”指令
  • ESP32 接收指令,从 SD 卡读取 MP3 并播放

优势:实现完整音频功能,减轻 K230 负担


8. 常见问题与调试

❌ 问题1:I2S 无数据

排查

  • FPIOA 映射是否正确?
  • 麦克风供电是否正常?
  • 采样率是否匹配?
  • 使用 i2s.record() 前是否初始化?

❌ 问题2:PWM 播放无声

解决

  • 检查引脚是否支持 PWM
  • 蜂鸣器是否为有源/无源?
  • 占空比是否为 0?

❌ 问题3:音频噪音大

优化

  • 使用差分麦克风(如 INMP441)
  • 远离电源干扰
  • 增加软件滤波(均值、FIR)

9. 性能与限制

操作能力
录音采样率最高 16kHz ~ 32kHz
位深16 位
声道单声道
播放质量PWM:低质量;需外接 DAC

建议

  • 仅用于语音命令采集、提示音播放
  • 高质量音频交由专用模块处理

本章你已掌握

  • I2S 麦克风音频采集
  • PCM 数据录制到 SD 卡
  • PWM 模拟音频播放
  • 外部音频协处理器集成
  • 音频数据传输与回放思路

http://www.dtcms.com/a/469124.html

相关文章:

  • 炫酷风格的 ECharts + AWS 实时数据 Dashboard
  • wordpress菜单 链接怎样进行站点优化
  • 【H3C NX30Pro】光猫桥接并使用OpenWRT配置NAS端口映射;配置IPv6、IPv4公网直连内网服务器;
  • Parasoft C/C++test如何将静态分析集成到VSCode中
  • 沈阳网站建设公司哪个好网站模板打包
  • 树莓派+ubuntu的蓝牙
  • 【k8s】基础概念+下载安装教程
  • K8S原理刨析
  • 前端学习之样式设计
  • vue3+elementplugs+原生css实现切换主题色
  • Windows用Notepad++编辑Shell脚本:一招解决Linux执行报错问题
  • 自己做网站要不要租服务器软件开发工程师时薪
  • 工业智能科技网站设计做搜狗pc网站软件下载
  • 企业网站制作收费拍卖行 网站建设
  • 网站建设和网站开发的区别域名主机基地
  • 宁波营销型网站建设首选肥东县建设局网站
  • 工商营业执照网上申报关键词优化报价
  • 帮人做网站要怎么赚钱吗网页设计软件培训机构
  • seo网站建设费用济南网站建设第六网建
  • 昆山市网站建设产品运营主要做什么
  • 网站建设进无形资产的规定电子商务网站硬件建设的核心
  • 免费的毕业设计网站建设北京移动端网站建设
  • 简易网站模板wordpress菜单创建
  • 哪个网站可以做兼职讲师建设部网站施工员查询
  • wordpress 通用代码seo关键词排行优化教程
  • 好看的知名企业网站制作网页的软件
  • 牛商网专注营销型网站建设加速器怎么加速网页
  • 某公司网站源码电脑版商城网站建设
  • dw和vs做网站哪个好用软件开发培训学费
  • 重庆网站建设velpaiseo优化排名易下拉试验