问题

网上找了好多地方,核心代码都是一样的,比如这句。

wavedata=np.fromstring(bindata,dtype=np.short)

效果也还行。

可一次随机加载了一个Office里的音效文件,波形完全不对,接近方波了,都是大起大落的数字。

再看波形参数是这样:

_wave_params(nchannels=1, sampwidth=1, framerate=11025, nframes=……)

看它的取样量化位宽(sampwidth)只是1字节,还使用numpy.short(int16)明显不对,byte/int8也不行。

加载到音频处理软件,显示信息为无符号8位,那么对于此WAV来说,用uint8才是正解。

另外,画图中也遇到了子图分块、颜色,总图标题及窗口标题的问题。

综合其它搜索结果及自行尝试,尤其是参考了这篇博文,画图参数很详细!


解决方法

写了如下的简单的代码,自动处理量化位宽、标题、声道个数与波形子图数目等相关事项。

# -*- coding: utf-8 -*-
import wave
import numpy as np
import pylab as pl #fPath=r"C:\Program Files\Microsoft Office\root\Office16\MEDIA\CAMERA.WAV"
fPath=r"C:\Windows\Media\Alarm04.wav"
f=wave.open(fPath,"rb")
para=f.getparams()
bindata=f.readframes(para.nframes)
f.close() #按量化位数定数据类型,不能全short,int16
#int0纯属占位,16位以上暂未列出,因24位量化无法直接处理,无numpy.int24,需自定义类型,另行开篇说明或找网上解决方案
dtypes=[np.int0,np.uint8,np.int16]
#新版python提示.fromstring()已经过时,不建议使用
wavedata=np.frombuffer(bindata,dtype=dtypes[para.sampwidth])
wavedata.shape = -1,para.nchannels
time=np.arange(0,para.nframes)*(1.0/para.framerate) #转为秒 pColors="bgrcmykw"
wTitle="Wave forms"
pl.figure(wTitle) #窗口自定义初始化,如标题等
#设置图的总标题,加上文件名;非Windows需修改分隔符
pl.suptitle(wTitle+" of " + fPath.split('\\')[-1])
for i in range(para.nchannels):
pl.subplot(para.nchannels*100+10+i+1)
pl.plot(time,wavedata[:,i],pColors[i])
pl.xlabel("Time(seconds)")
pl.show()

用python的pylab画wave波形之sampwidth问题的更多相关文章

  1. Python matplotlib pylab 画张图

    from pylab import * w1 = 1 w2 = 25 fs = 18 y = np.arange(-2,2,0.001) x = w1*y*log(y)-1.0/w2*exp(-(w2 ...

  2. python运用turtle 画出汉诺塔搬运过程

    python运用turtle 画出汉诺塔搬运过程 1.打开 IDLE 点击File-New File 新建立一个py文件 2.向py文件中输入如下代码 import turtle class Stac ...

  3. python生成字符画

    python生成字符画 这个idea来自于实验楼,非常适合练习PIL的像素处理,更重要的是非常有意思. 环境配置 依赖的第三方库就是PIL(Python Image Library),可以直接使用pi ...

  4. python中matplotlib画折线图实例(坐标轴数字、字符串混搭及标题中文显示)

    最近在用python中的matplotlib画折线图,遇到了坐标轴 "数字+刻度" 混合显示.标题中文显示.批量处理等诸多问题.通过学习解决了,来记录下.如有错误或不足之处,望请指 ...

  5. Python——教你画朵太阳花

    用python中的turtle函数画个太阳花,有以下几个步骤 1.首先,我们在开始中找到Python语言的IDLE软件脚本     2.然后出现该软件界面,如图,点击上面的Eile     3.然后在 ...

  6. Python下字符画(ascii art)生成

    之前在b站上看到有人用C写了个脚本把妹抖龙op转换成字符画的形式输出了,感觉比较好玩在下就用python也写了一遍(主要是因为python比较简单好用).这里就这里就不介绍字符画了,因为能搜到这个的肯 ...

  7. Python 的 Matplotlib 画图库

    Matplotlib安装 NumPy库方便数值运算,但枯燥的数据并不利于人们的直观理解. 数据需要可视化. Matplotlib:一个数据可视化函数库 使用前需要安装  利用Python自带 ...

  8. Python:Matplotlib 画曲线和柱状图(Code)

    原文链接:http://blog.csdn.net/ikerpeng/article/details/20523679 参考资料:http://matplotlib.org/gallery.html ...

  9. python之turtle画蚊香

    原理:利用turtle绘制圆形,并使圆半径逐步增加 代码如下: import turtle turtle.pensize(30) for i in range(30): turtle.circle(i ...

  10. Python 中 plt 画柱状图和折线图

    1. 背景 Python在一些数据可视化的过程中需要使用 plt 函数画柱状图和折线图. 2. 导入 import matplotlib.pyplot as plt 3. 柱状图 array= np. ...

随机推荐

  1. 2020年第11届蓝桥杯C/C++B组 第一轮省赛

    # JJU-干干 试题 A: 跑步训练 代码: #include <stdio.h> #include <stdlib.h> /* run this program using ...

  2. MySQL备份管理

    MySQL备份管理 目录 MySQL备份管理 一.MySQL备份管理 1.1.1 MySQL备份管理介绍 1.1.2 基于mysqldump的备份恢复 1.1.3 基于xtrabackup软件的物理备 ...

  3. 在NCBI中下载SRA数据

    目前,在NCBI中下载SRA数据主要有三种方式: 利用Aspera工具下载. 利用SRA Toolkit下载. 利用wget命令直接下载 第三种最为方便.其中的关键是得到下载数据的链接,即ftp的地址 ...

  4. Kubernetes快速部署

    Kubernetes快速部署 kubernetes简介 kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014 ...

  5. python+selenium+unittest自动化测试

    目前先用这个记录自动化测试相关内容,后期再进行整理: 1.自动化测试:testcase-->test suite  ---> TestRunner 2.TestRunner时,一种将内容打 ...

  6. mkcert 生成本地SSL证书 IIS 安装

    下载mkcert https://github.com/FiloSottile/mkcert/releases/latest 管理员身份 cmd 命令目录下 mkcert-v1.4.4-windows ...

  7. python 前言

    # python前言简介: ## 文件的概诉 ```py# 什么是文件 .文件夹? 其实是操作系统暴露给用户可以简单快捷操作硬盘的"接口"``` ## 计算机内部储存数据的原理 ` ...

  8. linux学习之vi

    vi 删除当前行dd 删除当前行及下面内容 dG 删除第2行到第3行2d 3d 删除指定行,删除第5行  5dd 删除当前行以下3行  d3

  9. hdu: 改革春风吹满地(叉乘求面积)

    Problem Description" 改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地.谢谢!(乐队奏乐)" 话说部分学生心态极好,每天就知道游戏,这次考试如此简 ...

  10. vue使用echarts控制台报错Can't get DOM width or height并且地图显示超范围

    用echarts实现展示地图,但是地图显示的范围一直超出他那个div,同时报错. 完整报错信息: Can't get DOM width or height. Please check dom.cli ...