pythonwav
⑴ python wav 测频率
#-*-coding:utf-8-*-
importwave
importpylabaspl
importnumpyasnp
#打开WAV文档
f=wave.open(r"c:WINDOWSMediading.wav","rb")
#读取格式信息
#(nchannels,sampwidth,framerate,nframes,comptype,compname)
params=f.getparams()
nchannels,sampwidth,framerate,nframes=params[:4]
#读取波形数据
str_data=f.readframes(nframes)
f.close()
#将波形数据转换为数组
wave_data=np.fromstring(str_data,dtype=np.short)
wave_data.shape=-1,2
wave_data=wave_data.T#这就是你想要的
time=np.arange(0,nframes)*(1.0/framerate)
#绘制波形
pl.subplot(211)
pl.plot(time,wave_data[0])
pl.subplot(212)
pl.plot(time,wave_data[1],c="g")
pl.xlabel("time(seconds)")
pl.show()
⑵ python 播放 wav
这是python的matplotlib里的一个画wav文件的时频分析(specgram)的函数。和matlab里的那个差不多。使用超级方便,自动就做好了短时傅立叶变换(short
time fourier
transform)~函数用法具体可参照http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.specgram
关于短时傅立叶变换的具体内容可google之~下面介绍程序。
#首先import各种library。wave和struct都是安装python2.6自带的。scipy可以在
#http://www.scipy.org/Download下载。pylab可在http://matplotlib.sourceforge.net/下载。都是非常#强大的包包啊~~
import wave
import struct
from scipy import *
from pylab import *
#读取wav文件,我这儿读了个自己用python写的音阶的wav
filename = '/Users/rongjin/Desktop/scale.wav'
wavefile = wave.open(filename, 'r') # open for writing
#读取wav文件的四种信息的函数。期中numframes表示一共读取了几个frames,在后面要用到滴。
nchannels = wavefile.getnchannels()
sample_width = wavefile.getsampwidth()
framerate = wavefile.getframerate()
numframes = wavefile.getnframes()
#建一个y的数列,用来保存后面读的每个frame的amplitude。
y = zeros(numframes)
#for循环,readframe(1)每次读一个frame,取其前两位,是左声道的信息。右声道就是后两位啦。
#unpack是struct里的一个函数,用法详见http://docs.python.org/library/struct.html。简单说来
就是把#packed的string转换成原来的数据,无论是什么样的数据都返回一个tuple。这里返回的是长度为一的一个
#tuple,所以我们取它的第零位。
for i in range(numframes):
val =
wavefile.readframes(1)
left =
val[0:2]
#right = val[2:4]
v =
struct.unpack('h', left )[0]
y[i] =
v
#framerate就是44100,文件初读取的值。然后本程序最关键的一步!specgram!实在太简单了。。。
Fs = framerate
specgram(y, NFFT=1024, Fs=Fs, noverlap=900)
show()
好看的specgram就画好了~~x轴是时间,y轴是频率~
⑶ python 不能打开wav文件
No such file or directory,不存在这样的文件或者目录,错误很明显呀,文件路径有问题
⑷ 谁知道如何在python中用处理wav文件,并且对他的频谱进行分析的程序
1.读取wav文件
# -*- coding: utf-8 -*-
import wave
import pylab as pl
import numpy as np
# 打开WAV文档
f = wave.open(r"c:\WINDOWS\Media\ding.wav", "rb")
# 读取格式信息
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
# 读取波形数据
str_data = f.readframes(nframes)
f.close()
#将波形数据转换为数组
wave_data = np.fromstring(str_data, dtype=np.short)
wave_data.shape = -1, 2
wave_data = wave_data.T
time = np.arange(0, nframes) * (1.0 / framerate)
# 绘制波形
pl.subplot(211)
pl.plot(time, wave_data[0])
pl.subplot(212)
pl.plot(time, wave_data[1], c="g")
pl.xlabel("time (seconds)")
pl.show()
2.观察信号频谱
# -*- coding: utf-8 -*-
import numpy as np
import pylab as pl
sampling_rate = 8000
fft_size = 512
t = np.arange(0, 1.0, 1.0/sampling_rate)
x = np.sin(2*np.pi*156.25*t) + 2*np.sin(2*np.pi*234.375*t)
xs = x[:fft_size]
xf = np.fft.rfft(xs)/fft_size
freqs = np.linspace(0, sampling_rate/2, fft_size/2+1)
xfp = 20*np.log10(np.clip(np.abs(xf), 1e-20, 1e100))
pl.figure(figsize=(8,4))
pl.subplot(211)
pl.plot(t[:fft_size], xs)
pl.xlabel(u"时间(秒)")
pl.title(u"156.25Hz和234.375Hz的波形和频谱")
pl.subplot(212)
pl.plot(freqs, xfp)
pl.xlabel(u"频率(Hz)")
pl.subplots_adjust(hspace=0.4)
pl.show()
⑸ 利用python编写代码如何把wav文件转为mp3文件
using lame (command line), you can encode wav to mp3 like this:
$ lame --preset insane /path/to/file.wav
which would create:
file.wav.mp3
in Python, you could use subprocess to call it:
wav = 'myfile.wav'
cmd = 'lame --preset insane %s' % wav
subprocess.call(cmd, shell=True)
⑹ python3.5scipy包怎样读取wav文件
用语音处理的库
楼主找找
pyb 提供了简洁的高层接口,极大的扩展了python处理音频文件的能力,pyb可能不是最强大的Python音频处理库,但绝对是Python最简洁易用的音频库只要,非要说有什么弊端,大概只有高度依赖ffmpeg,linux安装起来不太方便吧。
⑺ Python播放wav音频,在Windows系统下
手头正好一个脚本,在Windows下执行没有问题。供参考:
importwinsound,time,sys
mp3='qed.wav'
if__name__=='__main__':
iflen(sys.argv)<2:
times=1
else:
times=int(sys.argv[1])
iftimes==0:
while1:
winsound.PlaySound(mp3,winsound.SND_NODEFAULT)
else:
foriinrange(times):
winsound.PlaySound(mp3,winsound.SND_NODEFAULT)
⑻ 怎么通过程序(如python)判断一个音频文件(如wav、mp3等格式)的声音清晰度
我用wpf画过wav的频谱图和语谱图,这里有个参考http://www.codeproject.com/Articles/488655/Visualizing-Sound
波形图应该更简单吧 计算声音强度就好了 至于mp3我想应该先解码成pcm
⑼ python中的while循环可以做什么东西
Python语言的优点
简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。
易学:Python极其容易上手,因为Python有极其简单的说明文档 [7] 。
速度快:Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。
免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。
高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。
解释性:一个用编译型语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。
运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行 程序。
在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。
面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。
可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。
可嵌入性:可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。
丰富的库:Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
规范的代码:Python采用强制缩进的方式使得代码具有较好可读性。而Python语言写的程序不需要编译成二进制代码。
⑽ 怎样用python画wav文件的时频分析图
这是python的matplotlib里的一个画wav文件的时频分析(specgram)的函数。和matlab里的那个差不多。使用超级方便,自动就做好了短时傅立叶变换(short
time fourier
transform)~函数用法具体可参照http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.specgram
关于短时傅立叶变换的具体内容可google之~下面介绍程序。
#首先import各种library。wave和struct都是安装python2.6自带的。scipy可以在
#http://www.scipy.org/Download下载。pylab可在http://matplotlib.sourceforge.net/下载。都是非常#强大的包包啊~~
import wave
import struct
from scipy import *
from pylab import *
#读取wav文件,我这儿读了个自己用python写的音阶的wav
filename = '/Users/rongjin/Desktop/scale.wav'
wavefile = wave.open(filename, 'r') # open for writing
#读取wav文件的四种信息的函数。期中numframes表示一共读取了几个frames,在后面要用到滴。
nchannels = wavefile.getnchannels()
sample_width = wavefile.getsampwidth()
framerate = wavefile.getframerate()
numframes = wavefile.getnframes()
#建一个y的数列,用来保存后面读的每个frame的amplitude。
y = zeros(numframes)
#for循环,readframe(1)每次读一个frame,取其前两位,是左声道的信息。右声道就是后两位啦。
#unpack是struct里的一个函数,用法详见http://docs.python.org/library/struct.html。简单说来
就是把#packed的string转换成原来的数据,无论是什么样的数据都返回一个tuple。这里返回的是长度为一的一个
#tuple,所以我们取它的第零位。
for i in range(numframes):
val =
wavefile.readframes(1)
left =
val[0:2]
#right = val[2:4]
v =
struct.unpack('h', left )[0]
y[i] =
v
#framerate就是44100,文件初读取的值。然后本程序最关键的一步!specgram!实在太简单了。。。
Fs = framerate
specgram(y, NFFT=1024, Fs=Fs, noverlap=900)
show()
耶~好看的specgram就画好了~~x轴是时间,y轴是频率~