python 实现wav的波形显示(时域和频域)

  音频处理中,经常要看一下啊频域图是什么样子的,这里自己写了一个小程序,可以完美的同步显示时域和频域图,直接上代码:

 1 #wave data   -xlxw
 2
 3 #import
 4 import wave as we
 5 import numpy as np
 6 import matplotlib.pyplot as plt
 7 import sys
 8
 9 def wavread(path):
10     wavfile =  we.open(path,"rb")
11     params = wavfile.getparams()
12     framesra,frameswav= params[2],params[3]
13     nchannels, sampwidth, framesra, frameswav = params[:4]
14     print("nchannels:%d" % nchannels)
15     print("sampwidth:%d" % sampwidth)
16     datawav = wavfile.readframes(frameswav)
17     wavfile.close()
18     datause = np.fromstring(datawav,dtype = np.short)
19     print(len(datause))
20     if nchannels == 2:
21         datause.shape = -1,2
22     datause = datause.T
23     time = np.arange(0, frameswav) * (1.0/framesra)
24     return datause,time,nchannels
25
26 def main():
27     path = sys.argv[1]
28     #path = input("The Path is:")
29     print(path)
30     wavdata,wavtime,nchannels = wavread(path)
31
32     N=len(wavdata)
33     framerate = 16000
34     start=0
35     df = 1
36     freq = [df*n for n in range(0,len(wavdata))]
37     print(len(wavdata))
38     print(len(wavtime))
39
40     c=np.fft.fft(wavdata)*nchannels
41     d=int(len(c)/2)
42     print(len(c))
43
44     fig, ax = plt.subplots(2, 1)
45
46
47     ax[0].plot(wavtime,wavdata,color = ‘green‘)
48     ax[0].set_xlabel(‘Time‘)
49     ax[0].set_ylabel(‘Amplitude‘)
50
51
52     ax[1].plot(freq,abs(c),color = ‘red‘)
53     ax[1].set_xlabel(‘Freq(HZ)‘)
54     ax[1].set_ylabel(‘Y(freq)‘)
55
56     plt.show()

 直接上图看结果:

  这个只能对单声道16k采样的wav格式做处理,不过,只要稍微加一更改,就可以处理别的了。具体改代码的事情,还是谁用谁做吧。做个程序员,总要付出一些代价的。

每日一言:君子役物,小人役于物。——《劝学》

原文地址:https://www.cnblogs.com/dylancao/p/9783410.html

时间: 2024-08-30 05:59:32

python 实现wav的波形显示(时域和频域)的相关文章

Python科学计算(两)——时域波形和正弦信号的频谱

Python科学计算(两)-- 时域和频域波形为正弦波形信号生成.计算和显示 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as pl import matplotlib import math import random row = 4 col = 4 N = 500 fs = 5 n = [2*math.pi*fs*t/N for t in range(N)] axis_x = np.linspace(

Python解析Wav文件并绘制波形的方法

资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在繁忙的生活中,我们经常会听些歌来放松一下自己,我们经常会从各种播放软件中听自己喜欢的歌,并且往往我们会下载一部分歌曲,而现在音频的种类也相当繁多,像是Wav,Mp3,FLAC,AAC等等很多格式,最近由于需要做一个能够分析Wav格式音频的波形来取得一些数据比如获取人录音时是否说完等等用途.本周先对解

[转] 基于C#的波形显示控件的实现

转自 基于C#的波形显示控件的实现[附完整源码下载] 编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的数据进行处理和保存,并以图形的方式显示),整个项目边学C# WinForm边设计,这个波形显示控件就是项目中的一部分,也花了自己绝大多数时间.此外,顺便将该波形显示控件当作自己毕业设计的内容,下文实际上是节选自自己的本科毕业论文,希望对大家能有所帮助.代码以及文章有疏漏.错误.不妥之处在所难免,欢迎

C# 串口波形显示

C#做的串口示波器,可以实现动态波形显示的效果. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.Text.

pycharm开发python时出现控制中文显示乱码

当pycharm开发python时,中文出现乱码 修改setting文件 这样就能正常显示 pycharm开发python时出现控制中文显示乱码

Python实现用户交互,显示省市县三级联动的选择

题目:Python实现用户交互,显示省市县三级联动的选择 代码: dic = { "江西": { "萍乡": ["安源", "彭高", "上栗"], "新余": ["良山", "新钢", "兴安岭"], }, "北京": { "大兴区": ["礼贤镇", "魏

Modelsim设置数据以模拟波形显示

选中希望以模拟波形显示的信号,右击选择format->Analog(automatic) 如果你的数据是用无符号数表示一个完整的波形的,那么可能显示出来的波形样子是下面的样子,不过不要紧,这是因为modelsim默认是按照有符号数据解析波形数据的缘故,我们可以再进行一次设置修改. 选中希望显示波形的信号,右击,选择Radix->Unsigned. 设置完成后,波形就如下所示了: 是不是发现虽然波形已经是完整的正弦波了,但是波形有部分却跑到其他信号的地盘去了呢?这也不要紧,是模拟波形的显示范围设

玩转X-CTR100 | X-PrintfScope波形显示

更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器配套的X-PrintfScope串口波形显示功能的使用,如其名,软件最大亮点是可以通过C语言Printf函数实现波形显示功能,使用简单灵活.另外也支持常规的串口通信协议,实现高效率传输. 原理介绍 X-CTR100控制器配套X-PrintfScope串口波形显示软件,具有八个显示通道,最大特点是可通过C标准库函数printf增加@标识实现数据波形显示

时域和频域变换之---傅里叶级数的数学推导

废话不多说先列提纲: 0.概述-需求分析-功能描述-受限和缺点改进+知识点预备 1.泰勒级数和傅里叶级数的本质区别,泰勒展开 2.  函数投影和向量正交 3.两个不变函数求导是本身e^x,sinx,cosx也是为什么要傅里叶转换的原因! 4.傅里叶技术推到过程 5.附录参考资料 0.有些时候,尤其是在图像处理中,矩阵运算数据量太大,特征提取量多,此时可以通过时域转频域来减少计算量,而且此转换不会损失数据完整性. 时域转频域的方法有周期函数用傅里叶技术,非周期函数(没有间断点的函数)用傅里叶转换,