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

【语音识别入门】Python音频处理示例(含完整代码)

一、读取本地音频数据

首先,需要import几个工具包,一个是python标准库中的wave模块,用于音频处理操作,numpmatplot提供数据处理函数。

import wave
# 用于绘制波形图
import matplotlib.pyplot as plt

# 用于计算波形数据
import numpy as np

# 用于系统处理 读取本地音频文件
import os


# 读取本地音频数据

# 打开wave文件
f = wave.open(r"audio06.wav",'rb')

# 读取格式信息
params = f.getparams()
nchannels ,sampwidth ,framerate ,nframes = params [:4]
print(framerate)

二、读取单通道音频,并绘制波形图(常见音频为左右两个声道)

(1) 通过第一步,可以继续读取音频数据本身,保存为字符串格式

readframes:读取声音数据,传递一个参数指定需要读取的长度(以取样点为单位),readframes返回的是二进制数据(一大堆bytes),在Python中用字符串表示二进制数据

strData = f.readframes(nframes)
(2) 如果需要绘制波形图,则需要将字符串格式的音频数据转化为 int 类型

frombuffer:根据声道数和量化单位,将读取的二进制数据转换为一个可以计算的数组,通过frombuffer函数将二进制转换为整型数组,通过其参数dtype指定转换后的数据格式。

waveData=np.frombuffer(strData,dtype=np.int16)

此处需要使用到 numpy 进行数据格式的转化

(3) 将幅值归一化

把数据变成(0,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。

waveData=waveData*1.0/(max(abs(waveData)))

这一步去掉也可画出波形图,可以尝试不用此步,找出波形图的不同

(4) 绘制图像

通过取样点数和取样频率计算出取样的时间:

time = np.arange(0,nframes)*(1.0/framerate)
(5)完整代码
import wave
# 用于绘制波形图
import matplotlib.pyplot as plt
# 用于计算波形数据
import numpy as np
# 用于系统处理 读取本地音频文件
import os
# 读取本地音频数据
# 打开wave文件
f = wave.open(r"audio06.wav",'rb')
# 读取格式信息
params = f.getparams()
nchannels ,sampwidth ,framerate ,nframes = params [:4]
print(framerate)

# 读取单通道音频 并绘制波形图(常见音频为左右两个声道)
# 读取波形数据
strData = f.readframes(nframes)

# 将字符串转换为16位整数
waveDate = np.frombuffer(strData,dtype=np.int16)

#归一化:把数据变成(0,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速
waveDate = waveDate*1.0/(max(abs(waveDate)))

# 计算音频时间
time = np.arange(0,nframes)*(1.0/framerate)

plt.plot(time,waveDate)
plt.xlabel("Time(s")
plt.ylabel("Amplitude")
plt.title("Single channel wavedata")
plt.show()


请添加图片描述

相关文章:

  • [iOS]-网络请求总结
  • 集合的父亲之Map------(双列集合顶级接口)和遍历方式
  • APS智能排产助力印染行业进行精细化管理
  • 大学公众号题库API 网课查题题库接口API接口
  • 2022年全球及中国游戏音乐行业头部企业市场占有率及排名调研报告
  • 网课 题库接口
  • Hadoop集群的启动顺序
  • openstack-mitaka(一) 架构简介
  • Opencv图像基本操作——读取、显示、截取图像、属性、颜色通道、边界填充、图像融合
  • 商业管理和经济学哪个好ib?
  • 如何做自媒体在一个月内赚到2万?
  • 广和通5G/4G/NB-IoT智慧水务一体化联网解决方案精准加码水利数智化
  • 《Mycat分布式数据库架构》之故障切换
  • 大数据营销促进消费品牌增长,消费品投资回归常识思维
  • 题库接口系统搭建
  • [数据结构]链表的实现在PHP中
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Consul Config 使用Git做版本控制的实现
  • JS题目及答案整理
  • Laravel 实践之路: 数据库迁移与数据填充
  • Mysql数据库的条件查询语句
  • Quartz初级教程
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 强力优化Rancher k8s中国区的使用体验
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 算法系列——算法入门之递归分而治之思想的实现
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 我的面试准备过程--容器(更新中)
  • 我有几个粽子,和一个故事
  • 原生JS动态加载JS、CSS文件及代码脚本
  • ​决定德拉瓦州地区版图的关键历史事件
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (蓝桥杯每日一题)love
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (转)用.Net的File控件上传文件的解决方案
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET CLR基本术语
  • .NET命令行(CLI)常用命令
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET与 java通用的3DES加密解密方法
  • .NET中统一的存储过程调用方法(收藏)
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [BJDCTF2020]The mystery of ip1
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [C++]C++基础知识概述