画频谱图+图中的y轴缩放,由1000改为1kHz
import wave
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
from matplotlib.ticker import FuncFormatter
path = "/mnt/d/data/projects/get_mceps/SF3-TM1"
name_list = ['A.wav','B.wav','X1.wav','X3.wav']
def changey(temp, position):
return int(temp/1000)
plt.figure(figsize=(20,8),dpi=200)
pic_name = ['(a)','(b)','(c)','(d)']
for i in range(len(name_list)):
wav_file = path + '/'+ name_list[i]
fw = wave.open(wav_file,'r')
soundInfo = fw.readframes(-1)
soundInfo = np.fromstring(soundInfo,np.int16)
f = fw.getframerate()
print(f)
plt.subplot(2,2,(i+1))
plt.subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=None, hspace=0.3)
plt.specgram(soundInfo,Fs = f, scale_by_freq = True, sides = 'default',cmap='gist_rainbow_r')
plt.gca().yaxis.set_major_formatter(FuncFormatter(changey))
plt.ylabel('Frequency(kHz)',fontdict={ 'size':20})
plt.xlabel('time(seconds)',fontdict={ 'size':20})
plt.xticks(size = 16)
plt.yticks(size = 16)
currentAxis=plt.gca()
if i!=1:
rect=patches.Rectangle((1.3, 10),1.4,3500,linewidth=4,edgecolor='r',facecolor='none',ls='--')
else:
rect=patches.Rectangle((0.93, 10),1.1,3500,linewidth=4,edgecolor='r',facecolor='none',ls='--')
currentAxis.add_patch(rect)
if i!=1:
rect=patches.Rectangle((3.2, 10),0.4,2500,linewidth=4,edgecolor='b',facecolor='none',ls='--')
else:
rect=patches.Rectangle((2.25, 10),0.36,2500,linewidth=4,edgecolor='b',facecolor='none',ls='--')
currentAxis.add_patch(rect)
if i!=1:
rect=patches.Rectangle((4.3, 10),0.7,1800,linewidth=4,edgecolor='m',facecolor='none',ls='--')
plt.text(5.8,9000,pic_name[i],fontdict={'weight':'roman','size':24})
else:
rect=patches.Rectangle((3.27, 10),0.7,1800,linewidth=4,edgecolor='m',facecolor='none',ls='--')
plt.text(4.8,9000,pic_name[i],fontdict={'weight':'roman','size':24})
currentAxis.add_patch(rect)
plt.savefig('./sf3-tm1-english-5-7'+'.jpg')
plt.show()
实验结果如下所示,为了防止被盗用,因此做了涂抹