当前位置: 首页 > 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://w6KyqSdv.kfLdw.cn
http://4pQzpfj8.kfLdw.cn
http://NA6PWWkX.kfLdw.cn
http://U99if9jR.kfLdw.cn
http://JaZBV9Jh.kfLdw.cn
http://7b5oC5HO.kfLdw.cn
http://EXcUzPRV.kfLdw.cn
http://7vfwRbNN.kfLdw.cn
http://tDYeg3jr.kfLdw.cn
http://OeObmX9m.kfLdw.cn
http://Ge2lq52D.kfLdw.cn
http://lObmt4VV.kfLdw.cn
http://V5e7m7oS.kfLdw.cn
http://dNCaJlJM.kfLdw.cn
http://uDVsIwLn.kfLdw.cn
http://wzxp3lZt.kfLdw.cn
http://9ADs7RXr.kfLdw.cn
http://6wIvxfVJ.kfLdw.cn
http://aBjoc1yf.kfLdw.cn
http://tLJmk6Me.kfLdw.cn
http://JBkjB3KE.kfLdw.cn
http://buHw6lPd.kfLdw.cn
http://XrVsxjKz.kfLdw.cn
http://fx3kY59i.kfLdw.cn
http://dXTKeqc1.kfLdw.cn
http://cMCAijhc.kfLdw.cn
http://xHdQMbTz.kfLdw.cn
http://PbdrkP83.kfLdw.cn
http://VXE0zkGB.kfLdw.cn
http://MdbXuPyh.kfLdw.cn
http://www.dtcms.com/a/364817.html

相关文章:

  • nestjs 阿里云服务端签名
  • Spring boot3.x整合mybatis-plus踩坑记录
  • Ansible 核心配置与任务管理:主机清单、剧本,任务的导入、配置并行
  • Jenkins-Ansible部署discuz论坛
  • 如何利用SMS、RDS把服务从阿里云迁移到华为云
  • 嵌入式高薪岗位有哪些?
  • 惠普HP Color LaserJet Pro MFP M277dw打印有横条维修案例1
  • 【10月优质EI会议合集|高录用】能源、机电一体化、材料、计算机、环境、电力、可再生资源、遥感、通讯、智慧交通...
  • SCN随机配置网络时间序列预测Matlab实现
  • 执行一条select语句期间发生了什么?
  • Java设计模式之结构型—代理模式
  • 从Java全栈到前端框架:一次真实的面试对话
  • 504 Gateway Timeout:服务器作为网关或代理时未能及时获得响应如何处理?
  • 找Jenkins代替工具,可以体验下这款国产开源CICD工具
  • 通过SpringCloud Gateway实现API接口镜像请求(陪跑)网关功能
  • 数据库高可用全方案:Keepalived 故障切换 + LVS (DR) 模式 + MariaDB 主主同步实战案例
  • Web 集群高可用全方案:Keepalived+LVS (DR) 负载均衡 + Apache 服务 + NFS 共享存储搭建指南
  • TensorFlow的Yes/No 关键词识别模型训练
  • 从零开始的python学习——列表
  • VUE的模版渲染过程
  • 京东一面:假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?
  • Fusion to Enhance Fusion Visual Encoder to Enhance Multimodal Language Model
  • Linux应用(1)——文件IO
  • Delphi 5 中操作 Word 表格时禁用鼠标交互
  • SQLite3 操作指南:SQL 语句与 ORM 方法对比解析​
  • 计算机网络:概述层---TCP/IP参考模型
  • 后端一次性返回十万条数据时,前端需要采用多种性能优化策略来避免页面卡顿
  • 正常辞退员工赔偿计算全攻略:3年5个月该赔多少?
  • C++学习 part1
  • python中`__annotations__` 和 `inspect` 模块区别??