使用specgram繪制時(shí)頻圖
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 # 顯示符號(hào)
filename = 'D:\\code\\code\\audio process\\test.wav'
fs,signal = wav.read(filename)
plt.figure()
plt.subplot(2,1,1)#第一個(gè)子圖
plt.specgram(signal[:,0],Fs=fs,scale_by_freq=True,sides='default')
plt.colorbar()#format='%+2.0f dB'
plt.subplot(2,1,2)#第二個(gè)子圖
plt.specgram(signal[:,1],Fs=fs,scale_by_freq=True,sides='default')#繪制語(yǔ)譜圖
plt.colorbar(format='%+2.0f dB')
plt.savefig('D:\\code\\code\\audio process\\test2.jpg')
#繪制頻譜圖
plt.figure()
ft=fft(signal[:,0])#需要注意 只能對(duì)一個(gè)通道的數(shù)據(jù)進(jìn)行操作
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的讀取數(shù)據(jù)機(jī)制不一樣
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個(gè)維度的mfcc
plt.figure()
mfcc=np.concatenate((mfccs,delta_mfccs,delta2_mfccs))#里面有括號(hào)
librosa.display.specshow(mfcc,sr=fs)
plt.show() 作者:躺躺更健康耶 https://www.bilibili.com/read/cv17517045 出處:bilibili
時(shí)頻圖如上
頻圖圖文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-649491.html
完整的mfcc文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-649491.html
將時(shí)頻圖直接獲取,不保存
fig = plt.figure() # 創(chuàng)建所需對(duì)象fig
plt.specgram(rri,Fs=fs,scale_by_freq=True,sides='default') # 直接繪制時(shí)頻圖,無(wú)需傅里葉變化
plt.colorbar()
canvas = FigureCanvasAgg(fig) # 將圖像從內(nèi)存中提取出來(lái)。
canvas.draw()
buf = canvas.buffer_rgba()
X = np.array(buf)
X = X[:, :, :3] # 提取前三通道的圖片, 第四個(gè)通道是全白的,所以不需要進(jìn)行提取了
print(X.shape)
到了這里,關(guān)于使用python繪制音頻的時(shí)頻圖、頻譜圖和MFCC特征圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!