首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

ESP32-S3 音频录制与百度语音识别传输:Micropython 智能语音助手项目实战

  • 25-02-17 11:21
  • 2650
  • 13308
blog.csdn.net

在物联网(IoT)开发领域,音频处理常常扮演着关键角色,例如智能语音助手、环境声音监测等场景都离不开音频的采集与分析。今天,我们就来深入剖析一段利用 Micropython 实现音频录制,并将录制的音频快速传输至百度语音识别服务的代码。

一、代码概述

这段 Python 代码利用 machine、urequests、ubinascii 和 network 等库,构建了一个名为 AudioRecorderAndSender 的类,实现了音频的录制、存储以及向百度语音识别服务传输的功能。整个流程一气呵成,避免了不必要的文件读写开销,旨在提高音频处理的效率。

二、代码详解

(一)类的初始化(__init__ 方法)

  1. def __init__(self):
  2. # 音频文件采样率
  3. self.sampleRate = 8000
  4. # 每音频采样比特数
  5. self.bitsPerSample = 16
  6. # 缓冲字节数
  7. self.bufSize = 32768
  8. # 一次录音数据的总字节数
  9. self.datasize = self.bufSize * 4
  10. # I2S所需管脚
  11. # 数据时钟
  12. self.sck_pin = Pin(5)
  13. # 帧时钟(INMP441模块模块WS)
  14. self.ws_pin = Pin(4)
  15. # 数据(INMP441模块模块SD)
  16. self.sd_pin = Pin(6)
  17. # 创建用于音频录制的I2S对象
  18. self.audioInI2S = I2S(0,
  19. sck=self.sck_pin, ws=self.ws_pin, sd=self.sd_pin,
  20. mode=I2S.RX,
  21. bits=self.bitsPerSample,
  22. format=I2S.STEREO,
  23. rate=self.sampleRate,
  24. ibuf=self.bufSize)
  25. # 音频数据读取缓冲
  26. self.readBuf = bytearray(self.bufSize)
  27. # 用于存储录制音频的字节数组
  28. self.recorded_audio = bytearray()

在类的初始化阶段,首先定义了一系列音频录制相关的参数,如采样率(sampleRate)为 8000Hz,每采样比特数(bitsPerSample)是 16 位,缓冲字节数(bufSize)32768 字节,这些参数决定了音频录制的质量与数据处理的粒度。同时,指定了 I2S 接口所需的管脚信息,用于硬件层面的音频数据采集连接,创建了 I2S 对象 audioInI2S 和用于暂存读取音频数据的缓冲 readBuf,以及最重要的,一个空的字节数组 recorded_audio,它将用来存储后续录制的音频数据,避免频繁写入文件。

(二)创建 WAV 文件头(createWavHeader 方法)

  1. def createWavHeader(self):
  2. o = bytes("RIFF", 'ascii') # (4byte) Marks file as RIFF
  3. o += (self.datasize + 36).to_bytes(4, 'little') # (4byte) File size in bytes excluding this and RIFF marker
  4. o += bytes("WAVE", 'ascii') # (4byte) File type
  5. o += bytes("fmt ", 'ascii') # (4byte) Format Chunk Marker
  6. o += (16).to_bytes(4, 'little') # (4byte) Length of above format data
  7. o += (1).to_bytes(2, 'little') # (4byte) Format type (1 - PCM)
  8. o += (2).to_bytes(2, 'little') # (2byte) 声道数
  9. o += (self.sampleRate).to_bytes(4, 'little') # (4byte) 采样率
  10. o += (self.sampleRate * 2 * self.bitsPerSample // 8).to_bytes(4, 'little') # (4byte)
注:本文转载自blog.csdn.net的的文章"https://blog.csdn.net/weixin_64353634/article/details/144984330"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

114
音视频
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top