使用python绘制音频的时频图、频谱图和MFCC特征图

使用specgram绘制时频图

import matplotlib.pyplot as plt
import numpy as np
import scipy.io.wavfile as wav
import matplotlib
from scipy.fft import fft
import librosa
import librosa.display

matplotlib.rc("font",family='SimHei') # 显示中文
matplotlib.rcParams['axes.unicode_minus']=False # 显示符号
filename = 'D:\\code\\code\\audio process\\test.wav'
fs,signal = wav.read(filename)

plt.figure()
plt.subplot(2,1,1)#第一个子图
plt.specgram(signal[:,0],Fs=fs,scale_by_freq=True,sides='default')
plt.colorbar()#format='%+2.0f dB'

plt.subplot(2,1,2)#第二个子图
plt.specgram(signal[:,1],Fs=fs,scale_by_freq=True,sides='default')#绘制语谱图
plt.colorbar(format='%+2.0f dB')

plt.savefig('D:\\code\\code\\audio process\\test2.jpg')

#绘制频谱图
plt.figure()
ft=fft(signal[:,0])#需要注意 只能对一个通道的数据进行操作
magnitude=np.absolute(ft)#取相似度
magnitude=magnitude[0:int(len(magnitude)/2)+1]
f=np.linspace(0,fs,len(magnitude))
plt.plot(f,magnitude)

plt.figure()
#绘制MFCC scipy与librosa的读取数据机制不一样
signal,fs=librosa.load(filename,sr=44100)#sr为采样率,mono
print(signal.shape,type(signal),len(signal))
#(2, 10411757) <class 'numpy.ndarray'> 2
mfccs=librosa.feature.mfcc(y=signal,n_mfcc=13,sr=fs)
print(type(mfccs))
librosa.display.specshow(mfccs,sr=fs)
#绘制一阶mfcc
plt.figure()
delta_mfccs=librosa.feature.delta(mfccs)
print(type(delta_mfccs))
librosa.display.specshow(delta_mfccs,sr=fs)
#绘制二阶mfcc
plt.figure()
delta2_mfccs=librosa.feature.delta(mfccs,order=2)
librosa.display.specshow(delta2_mfccs,sr=fs)
print(type(delta2_mfccs))
#绘制39个维度的mfcc
plt.figure()
mfcc=np.concatenate((mfccs,delta_mfccs,delta2_mfccs))#里面有括号
librosa.display.specshow(mfcc,sr=fs)
plt.show() 作者:躺躺更健康耶 https://www.bilibili.com/read/cv17517045 出处:bilibili

时频图
时频图如上

在这里插入图片描述
频图图

在这里插入图片描述
完整的mfcc

将时频图直接获取,不保存


fig = plt.figure()                                                  # 创建所需对象fig
plt.specgram(rri,Fs=fs,scale_by_freq=True,sides='default')          # 直接绘制时频图,无需傅里叶变化
plt.colorbar()
canvas = FigureCanvasAgg(fig)                                       # 将图像从内存中提取出来。
canvas.draw()
buf = canvas.buffer_rgba()
X = np.array(buf)
X = X[:, :, :3]                                                      # 提取前三通道的图片, 第四个通道是全白的,所以不需要进行提取了
print(X.shape)
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用Python绘制wav频谱图,你可以使用scipy库和pylab库来实现。下面是一个参考代码,你可以根据自己的需要进行调整: ```python import wave import struct import numpy from scipy import * from pylab import * def Plot_fft_freq_chart(filename, plot=False): wavefile = wave.open(filename, 'r') # 打开wav文件 nchannels = wavefile.getnchannels() # 获取声道数 sample_width = wavefile.getsampwidth() # 获取采样宽度 framerate = wavefile.getframerate() # 获取采样率 numframes = wavefile.getnframes() # 获取帧数 print("channel", nchannels) print("sample_width", sample_width) print("framerate", framerate) print("numframes", numframes) y = numpy.zeros(numframes) for i in range(numframes): val = wavefile.readframes(1) left = val = v Fs = framerate try: data, freqs, bins, im = specgram(y, NFFT=1024, Fs=Fs, noverlap=900) mm = data<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [使用python绘制wav 音频文件频谱图](https://blog.csdn.net/es15071848238/article/details/121827343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [使用python绘制音频频图频谱图MFCC特征](https://blog.csdn.net/fuzekun/article/details/129112730)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值