Python绘制语谱图+时域波形

Python绘制语谱图+时域波形

# 导入相应的包
 import numpy, wave
 import matplotlib.pyplot as plt
 import numpy as np
 import os
 
filepath = 'C:/auditory/'  # 添加路径
filename = os.listdir(filepath)  # 得到文件夹下的所有文件名
for i in range(len(filename)):
     f = wave.open(filepath + filename[i], 'rb')  # 调用wave模块中的open函数,打开语音文件。
     params= f.getparams()  # 得到语音参数
     nchannels, sampwidth, framerate, nframes = params[:4]  # nchannels:音频通道数,sampwidth:每个音频样本的字节数,framerate:采样率,nframes:音频采样点数
     strData = f.readframes(nframes)  # 读取音频,字符串格式
     wavaData = np.fromstring(strData, dtype=np.int16)  # 得到的数据是字符串,将字符串转为int型
     wavaData = wavaData * 1.0/max(abs(wavaData))  # wave幅值归一化
     wavaData = np.reshape(wavaData, [nframes, nchannels]).T  # .T 表示转置
     f.close()
 
     # 绘制语谱图
     plt.figure()
     plt.specgram(wavaData[0], Fs=framerate, scale_by_freq=True, sides='default')  # 绘制频谱
     plt.xlabel('Time(s)')
     plt.ylabel('Frequency')
     plt.title("Spectrogram_{}".format(i+1))
     plt.savefig(filepath+'语谱图/{}.jpg'.format(filename[i][:-4]))
     plt.show()
 
     # 绘制时域波形
     time = np.arange(0, nframes) * (1.0 / framerate)
     time = np.reshape(time, [nframes, 1]).T
     plt.plot(time[0, :nframes], wavaData[0, :nframes], c="b")
     plt.xlabel("time(seconds)")
     plt.ylabel("amplitude")
     plt.title("Original wave")
     plt.savefig(filepath+'波形图/{}_.jpg'.format(filename[i][:-4]))  # 保存绘制的图形
     plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值