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

02-Media-3-audio.py 音频输入输出,录音、播放、实时回放演示

audio.py 是一个音频输入输出的示例程序,包含录音、播放、实时回放和录音后播放的功能。
程序使用media模块和pyaudio模块进行音频处理,使用wave模块读写wav文件。运行此程序需要SD卡,用于存储保存的wav录音文件,以及播放存储的音频文件。

运行主函数中的相应行,可以选择测试不同的功能:

  • record_audio() - 仅录制

  • play_audio() - 仅播放

  • loop_audio() - 实时回放

  • audio_recorder() - 录制后播放(默认)

程序展示了完整的音频处理流程,包括录制、保存、加载和播放音频文件,以及实时音频处理功能,核心的几项函数功能如下:

  1. record_audio(filename, duration)函数:
    参数:filename为保存的wav文件名,duration为录制时长(秒)。
    功能:录制指定时长的音频并保存为wav文件。
    步骤:
    - 设置音频参数(CHUNK、格式、声道数、采样率)。
    - 初始化PyAudio和MediaManager(用于vb buffer)。
    - 打开音频输入流,设置音量,并启用自动噪声抑制(ANS)。
    - 循环读取音频数据并存入列表。
    - 将列表中的数据写入wav文件。
    - 清理资源(停止流、关闭流、终止PyAudio、释放vb buffer)。

  2. play_audio(filename)函数:
    参数:filename为要播放的wav文件名。
    功能:播放指定的wav文件。
    步骤:
    - 打开wav文件并读取其参数(采样宽度、声道数、采样率)。
    - 初始化PyAudio和MediaManager。
    - 打开音频输出流,设置音量。
    - 从wav文件中读取数据并写入音频输出流进行播放。
    - 清理资源。

  3. loop_audio(duration)函数:
    参数:duration为回放时长(秒)。
    功能:实时采集音频并立即播放(实时回放)。
    步骤:
    - 设置音频参数(与record_audio类似)。
    - 初始化PyAudio和MediaManager。
    - 同时打开音频输入流和输出流,并设置各自的音量,输入流启用ANS。
    - 从输入流读取数据并立即写入输出流。
    - 清理资源。

  4. audio_recorder(filename, duration)函数:
    参数:filename为保存的wav文件名,duration为录制时长(秒)。
    功能:先录制音频保存为wav文件,然后播放这个wav文件。
    步骤:
    - 设置音频参数(这里设置为单声道)。
    - 初始化PyAudio和MediaManager。
    - 录制音频部分(与record_audio类似,但声道数为1)。
    - 播放音频部分(与play_audio类似,但是使用同一个PyAudio实例,且不重复初始化MediaManager)。
    - 清理资源。

audio_recorder('/sdcard/examples/test.wav', 15)

运行效果:使用板载麦克风进行录制15秒音频,然后使用外接喇叭进行播放。

同时会在虚拟U盘中保存录音文件如下:

audio_recorder('/sdcard/examples/test.wav', 15) #录制15秒音频并播放#---------------------------------------------------------
实际运行输出结果:
audio sample start
vb common pool count 3
input volume : (70, 85)
enable audio 3a:ans
start record...
stop record...
output volume : (85, 85)
start p
http://www.xdnf.cn/news/1443133.html

相关文章:

  • 在 Android MVVM 架构中,获取 ViewModel 的几种方式
  • 微服务的编程测评系统20-虚拟机-nginx-部署
  • 基于Java的瑜伽馆管理系统的设计与实现(代码+数据库+LW)
  • 【LeetCode】21、合并两个有序链表
  • 【设计模式】 装饰模式
  • 【机器学习深度学习】RAG边界处理策略
  • Django REST Framework Serializer 进阶教程
  • word删除指定页面
  • Ubuntu22.04中使用cmake安装abseil-cpp库
  • 【数据分享】283个地级市产业结构合理化水平和产业结构高级化指数(2006-2019)
  • Upload-Labs靶场全20关通关攻略(含原理+实操+环境配置)
  • 利用 Python 绘制环形热力图
  • SuperMap GIS基础产品FAQ集锦(20250819)
  • HTML应用指南:利用POST请求获取全国九号电动车体验店服务店位置信息
  • MyBatis 常见错误与解决方案:从坑中爬出的实战指南
  • 时序数据库选型指南:Apache IoTDB快速部署与实战应用
  • powershell实现,user权限下给软件提取。
  • 数学家破解世界难题——拒绝领奖拒绝百万奖金
  • AV-NeRF、AV-GS、AV-Surf论文解读
  • 基于数据挖掘的当代不孕症医案证治规律研究
  • C# Activator.GetObject 原理与示例:理解.NET Remoting远程调用
  • AI 时代零售数据底座怎么建?首份《零售一体化云数据库白皮书》发布
  • 强化微调:以Swift框架进行GRPO多模态模型强化微调为例
  • 【明道云】[工作表控件5] 手机控件的格式化处理
  • 在麒麟 ARM (aarch64)安装OpenJDK11和elasticsearchkibana
  • 云手机中的三大核心技术主要是指什么?
  • Docker部署Lunalytics开源监控工具
  • 开源检索增强生成(UltraRAG)框架
  • Unity2018版本安卓打包环境配置问题
  • 搞定鸿蒙新手 3 大痛点:页面跳转实现、应用标识修改与 Hyper-V 启动故障排查