用python的pylab画wave波形之sampwidth问题
问题
网上找了好多地方,核心代码都是一样的,比如这句。
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问题的更多相关文章
- 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 ...
- python运用turtle 画出汉诺塔搬运过程
python运用turtle 画出汉诺塔搬运过程 1.打开 IDLE 点击File-New File 新建立一个py文件 2.向py文件中输入如下代码 import turtle class Stac ...
- python生成字符画
python生成字符画 这个idea来自于实验楼,非常适合练习PIL的像素处理,更重要的是非常有意思. 环境配置 依赖的第三方库就是PIL(Python Image Library),可以直接使用pi ...
- python中matplotlib画折线图实例(坐标轴数字、字符串混搭及标题中文显示)
最近在用python中的matplotlib画折线图,遇到了坐标轴 "数字+刻度" 混合显示.标题中文显示.批量处理等诸多问题.通过学习解决了,来记录下.如有错误或不足之处,望请指 ...
- Python——教你画朵太阳花
用python中的turtle函数画个太阳花,有以下几个步骤 1.首先,我们在开始中找到Python语言的IDLE软件脚本 2.然后出现该软件界面,如图,点击上面的Eile 3.然后在 ...
- Python下字符画(ascii art)生成
之前在b站上看到有人用C写了个脚本把妹抖龙op转换成字符画的形式输出了,感觉比较好玩在下就用python也写了一遍(主要是因为python比较简单好用).这里就这里就不介绍字符画了,因为能搜到这个的肯 ...
- Python 的 Matplotlib 画图库
Matplotlib安装 NumPy库方便数值运算,但枯燥的数据并不利于人们的直观理解. 数据需要可视化. Matplotlib:一个数据可视化函数库 使用前需要安装 利用Python自带 ...
- Python:Matplotlib 画曲线和柱状图(Code)
原文链接:http://blog.csdn.net/ikerpeng/article/details/20523679 参考资料:http://matplotlib.org/gallery.html ...
- python之turtle画蚊香
原理:利用turtle绘制圆形,并使圆半径逐步增加 代码如下: import turtle turtle.pensize(30) for i in range(30): turtle.circle(i ...
- Python 中 plt 画柱状图和折线图
1. 背景 Python在一些数据可视化的过程中需要使用 plt 函数画柱状图和折线图. 2. 导入 import matplotlib.pyplot as plt 3. 柱状图 array= np. ...
随机推荐
- Debug --> python中的True False 0 1
今天看了下python中的一些基础知识,以offer64为例叭! 求 1+2+...+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B ...
- homework1(1)
来自桂林理工大学物联网工程2019届的April 没参与过什么比赛项目但是课程学习能力还行,主要是快速学习之后很快就会忘记,接下来应该好好的总结并熟练记住运用知识完成对生活等各种的实践. 对课程的希望 ...
- C++ 复习函数的基本知识
C++ 复习函数的基本知识 要使用 C++ 函数,必须完成如下工作: 1. 提供函数定义: 2. 提供函数原型: 3. 调用函数. 例子: #include <iostream> usin ...
- python音乐分类--knn
1 #利用knn算法分类音乐,将音乐进行情绪分类 2 #将音乐分为兴奋的(excited), 愤怒的(angry),悲伤的(sorrowful),轻松的(relaxed) 3 4 #可分离因素 5 # ...
- 11.25 es6
### 项目初始化 `npm init` `npm init -y` ### 安装项目依赖(包) `npm install` ### 安装 `npm install 包名 --save` `npm i ...
- Parallels Desktop 18(Mac虚拟机)v18.0.0(53049)无限试用版+win11系统
Parallels Desktop 18 for Mac 是一款强大的虚拟机软件,让您无需重启即可在 Mac 上运行 Windows 应用程序不会减慢 Mac 的运行速度,具有速度快.操作简单且功能强 ...
- Error:fatal: no such path /web/controller/XXXController.java in HEAD. 报错!
现象: Error:fatal: no such path /test/XXXController.java in HEAD. 报错! 原因: 重命名文件夹大小写问题: 解决办法: git mv Te ...
- JAVA 学习打卡 day3
2022-04-25 22:53:16 1.运算符 表达式是由操作数与运算符所组成Java中的语句有很多种形式,表达式就是其中一种形式.表达式是由操作数与运算符所组成,操作数可以是常量.变量也可以是方 ...
- [Leetcode 104]二叉树最大深度Maximum Depth of Binary Tree
题目 求二叉树的深度,即根节点出发的最长路径上点的个数,即最长路径+1(本身这个点 https://leetcode.com/problems/maximum-depth-of-binary-tree ...
- C# 自定义控件如何正确的继承父类
C# 自定义控件可以分为三类: 复合控件:基本控件组合而成.应当继承自 UserControl 扩展控件:继承基本控件,扩展一些属性和事件.比如继承 Button 自定义控件:直接继承自 Contro ...